我发现以下代码在gcc 4.7.3上给出了编译错误,但在clang 3.3上没有:
#include <cstdint>
struct X {
explicit operator uint32_t() { return 0; }
};
int main() {
static_cast< int >( X() );
return 0;
}
问题是,哪个是对的? Gcc 4.7.3说:
testcast.cpp:8:29: error: invalid static_cast from type 'X' to type 'int'
我认为发生的是clang使用uint32_t运算符来获取无符号,然后隐式地将其转换为int。我怀疑规范并没有留下这个未定义的内容,因此我希望其中一个编译器出错。