相关疑难解决方法(0)

类静态constexpr的C++链接器错误

我正在编译以下简单程序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++错误还是我仍然需要使用技巧来解决这个烦恼?

c++ linker constexpr c++11

46
推荐指数
5
解决办法
2万
查看次数

标签 统计

c++ ×1

c++11 ×1

constexpr ×1

linker ×1