考虑以下程序:
extern int x;
auto x = 42;
int main() { }
Run Code Online (Sandbox Code Playgroud)
Clang 3.5接受它(现场演示),GCC 4.9和VS2013不接受(前者的现场演示).谁是对的,C++标准中指定的正确行为在哪里?
class Foo {
public:
static const char *constant_string;
};
auto Foo::constant_string = "foo";
int main(void) {
};
Run Code Online (Sandbox Code Playgroud)
编译:gcc(Ubuntu/Linaro 4.6.3-1ubuntu5)4.6.3像这样:
gcc -std=c++0x ./foo.cc
./foo.cc:6:11: error: conflicting declaration ‘auto Foo::constant_string’
./foo.cc:3:22: error: ‘Foo::constant_string’ has a previous declaration as ‘const char* Foo::constant_string’
./foo.cc:6:11: error: declaration of ‘const char* Foo::constant_string’ outside of class is not definition [-fpermissive]
Run Code Online (Sandbox Code Playgroud)
这是auto关键字的预期行为,还是gcc +中的错误
看看这个片段:
int a;
extern int b;
auto b = a;
Run Code Online (Sandbox Code Playgroud)
它结构良好吗?Clang成功编译了它,但是GCC和MSVC没有.
(当我回答如何声明和定义具有推导类型的静态成员时出现了这个问题?)