我正在编译以下简单程序g++-4.6.1 --std=c++0x:
#include <algorithm>
struct S
{
static constexpr int X = 10;
};
int main()
{
return std::min(S::X, 0);
};
Run Code Online (Sandbox Code Playgroud)
我收到以下链接器错误:
/tmp/ccBj7UBt.o: In function `main':
scratch.cpp:(.text+0x17): undefined reference to `S::X'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我意识到内联定义的静态成员没有定义符号,但我在(可能是有缺陷的)印象中使用constexpr告诉编译器始终将符号视为表达式; 所以,编译器会知道传递对符号的引用是不合法的S::X(出于同样的原因,你不能引用文字10).
但是如果S被声明为命名空间,即"命名空间S"而不是"struct S",那么一切都很好.
这是一个g++错误还是我仍然需要使用技巧来解决这个烦恼?