我的同事刚刚通过一个新平台的新编译器来运行我们的代码库,毫不奇怪,之前没有报告过错误。
其中一个涉及原始作者在调用该类的静态函数时偶然输入两次类名的代码。看起来像这样:
class Thing
{
public:
static void DoStuff ();
};
int main (int, char **)
{
Thing::Thing::DoStuff();
// or even: Thing::Thing::Thing::Thing::Thing::Thing::DoStuff();
return 0;
}
我的本地(Cygwin)机器上的GCC 4.9.2编译得很好,即使用-Wall -Wextra -Wpedantic
也是如此。我们用于嵌入式系统的定制Clang也接受它。 Visual Studio 2012(v110)给出了错误:
error C3083: '{ctor}': the symbol to the left of a '::' must be a type
我可以想象同样有说服力的论据:
哪一个是正确的?