我正在寻找g++的一个警告编译选项,它可以防止将bool静默转换为double。这个答案与int转double的更广泛的问题有关。该问题在那里被驳回,因为它被认为是无损转换和完全合法的。然而,由于bool具有比简单整数更多的语义含义,我期望从bool到double的隐式转换会发出警告。我已经尝试了以下代码:
-Wall -Wextra -pedantic -Wconversion
,但没有成功(没有发出警告)。#include <iostream>
int foo(double var){
return static_cast<int>(var);
}
int main(){
std::cout << foo(5) << std::endl;
std::cout << foo(5.1) << std::endl;
std::cout << foo(false) << std::endl; // here I want the warning
return 0;
}
我使用的是g++ 4.9.2,但建议使用更高版本的回答也完全可以接受。
谢谢。
foo
进行重载,使其接受一个布尔值参数,然后不实现这个重载。这将导致链接错误。如果您想要编译器错误,那么模板可以提供这种功能。 - john