Я компилирую следующую простую программу с 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
Я понимаю, что встроенные в static статические члены не имеют определенных символов, но я находился под (вероятно, ошибочным) впечатлением, что использование constexpr
подсказывало компилятору всегда относиться к символу как к выражению; поэтому компилятор знал бы, что не имеет права передавать ссылку на символ S::X
(по той же причине вы не можете взять ссылку на литерал 10
).
Однако, если S объявлено как пространство имен, то есть "пространство имен S" вместо "struct S", все ссылки отлично.
Является ли это ошибкой g++
или мне все еще нужно использовать трюк, чтобы обойти это раздражение?