I am compiling the following simple program with g++-4.6.1 --std=c++0x
:
#include <algorithm>
struct S
{
static constexpr int X = 10;
};
int main()
{
return std::min(S::X, 0);
};
I get the following linker error:
/tmp/ccBj7UBt.o: In function `main':
scratch.cpp:(.text+0x17): undefined reference to `S::X'
collect2: ld returned 1 exit status
I realize that inline-defined static members do not have symbols defined, but I was under the (probably flawed) impression that using constexpr
told the compiler to always treat the symbol as an expression; so, the compiler would know that it is not legal to pass a reference to the symbol S::X
(for the same reason you can't take a reference to the literal 10
).
However if S is declared as namespace, i.e. "namespace S" instead of "struct S", everything links fine.
Is this a g++
bug or do I still have to use a trick to workaround this annoyance?