GCC:禁止隐式bool-> int转换

yar*_*rrr 7 c++ gcc

是否有任何gcc标志禁止隐式"bool - > int"转换?

我想用这段代码得到任何警告:

void function( int value, bool flag ) { }

int main()
{
  int a = 123;
  bool flag = true;

  //oops, a common mistake
  function( flag, a );
}
Run Code Online (Sandbox Code Playgroud)

Jar*_*d42 5

作为一种解决方法,在C++ 11中,您可以删除其他可能的重载:

template <typename T> void function(int, T) = delete;
Run Code Online (Sandbox Code Playgroud)


use*_*815 5

回答你的问题:不,在这种情况下没有 gcc 标志来发出警告。您的问题已在 gcc 邮件列表上讨论过多次。例如这里

编译器不检查这一点的主要原因在于,否则每个语句if( intval )也会引发警告。