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