我的问题是:为什么 VC 只为下面的注释行之一发出警告 4365,而不是另一个?
#pragma warning(1: 4365)
void test1(const unsigned short) {}
unsigned short test2() { return 0; }
int main()
{
const unsigned short a = 0;
const unsigned short b = 0;
test1(a + b); // This line gives no warning
test1(test2() + b); // This line gives C4365
return 0;
}
在 VS2010 和 VS2012 Express 下测试。
作为参考,完整的警告文本是这样的:
warning C4365: 'argument' : conversion from 'int' to 'const unsigned short', signed/unsigned mismatch
使用 Clang 3.3(通过 Clang-Win32 和 ClangVSx),此代码中不会报告任何警告(当然除了未知的编译指示)。