C++ Linker Error With Class static constexpr

Я компилирую следующую простую программу с помощью 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++ или мне все же придется использовать трюк, чтобы обойти эту неприятность?

46
задан Community 19 July 2012 в 22:28
поделиться