Error de referencia indefinido para miembro constexpr estático
Considera este código:
#include <vector>
struct A {
static constexpr int kDefaultValue = -1;
std::vector<int> v;
A(int n): v(n, A::kDefaultValue) {}
};
int main() {
A(10);
return 0;
}
No se puede vincular (llvm clang, gcc 4.9, ambos en OS X):
Undefined symbols for architecture x86_64:
"A::kDefaultValue", referenced from:
A::(int) in main.cpp.o
ld: symbol(s) not found for architecture x86_64
La pregunta es ¿qué le pasa? Se puede arreglar porstatic_cast
-En gA::kDefaultValue
aint
. O moviéndosekDefaultValue
fuera deA
. Ambos casos parecen ser feos. ¿Es esta otra forma de vincularlo?