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