Consider this code:
#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;
}
It fails to link (llvm clang, gcc 4.9, both on 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
The question is what's wrong with it? It can be fixed by static_cast
-ing A::kDefaultValue
to int
. Or by moving kDefaultValue
out of A
. Both cases seem to be ugly. Is this another way to make it link?