【发布时间】:2012-01-17 04:27:43
【问题描述】:
我正在用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
我意识到内联定义的静态成员没有定义符号,但我的(可能有缺陷的)印象是使用constexpr 告诉编译器始终将符号视为表达式;因此,编译器会知道传递对符号 S::X 的引用是不合法的(出于同样的原因,您不能引用文字 10)。
但是,如果 S 被声明为命名空间,即“命名空间 S”而不是“结构 S”,则一切都可以正常链接。
这是 g++ 错误还是我仍然需要使用技巧来解决这个烦恼?
【问题讨论】:
标签: c++ linker c++11 constexpr