C++ 如何让编译器警告这是一个无效的bool?

C++ 如何让编译器警告这是一个无效的bool?,c++,boolean,compiler-warnings,constexpr,C++,Boolean,Compiler Warnings,Constexpr,我们刚刚被一个拼写错误烫伤了:“constexpr bool maxDistance=10000;” gcc和clang都在编译时没有任何警告 这里真正的错误是变量不应该是bool类型,而应该是整数类型 我们如何确保将来收到编译器警告? #包括 constexpr布尔数=1234; int main(int argc,char*argv[]) { std::cout您应该使用直接列表初始化语法,它禁止缩小: constexpr bool number{1234}; // error: narro

我们刚刚被一个拼写错误烫伤了:“constexpr bool maxDistance=10000;

gcc和clang都在编译时没有任何警告

这里真正的错误是变量不应该是bool类型,而应该是整数类型

我们如何确保将来收到编译器警告?

#包括
constexpr布尔数=1234;
int main(int argc,char*argv[])
{
std::cout您应该使用直接列表初始化语法,它禁止缩小:

constexpr bool number{1234}; // error: narrowing conversion of '1234' from 'int' to 'bool' [-Wnarrowing]

我发现gcc有一个标志“-Wint in bool context”,但是我使用的版本(5.4.0)和clang(3.8.0)似乎都没有实现这个标志


这是正确的方法吗?

我认为在clang和gcc中都没有关于
bool number=1234;
的警告。为bool分配一个整数是一个合法且定义良好的操作,因此编译器不会发出警告。如果需要,请找到一个支持该选项的静态分析工具msvc会给出警告:“隐式转换…可能会丢失信息。”@RemyLebeau:对于OP来说,很明显,这是一个错误。没有人会用整型文字初始化
bool
。为什么这会被否决?它似乎起作用:test.cpp:3:24:error:常量表达式的计算结果为1234,不能缩小为'bool'[-Wc++11缩小]constexpr bool number{1234};“在需要布尔值的情况下,警告可疑使用整数值”。我想说,您的案例肯定满足了这一点,所以gcc应该产生警告。但它不会产生警告。也许您可以将此问题提交给gcc开发人员作为增强。
constexpr bool number{1234}; // error: narrowing conversion of '1234' from 'int' to 'bool' [-Wnarrowing]