So, I'm aware that in C++ static members can be initialized inside the class if they are a const literal type like the following
class test{
public:
static constexpr int stc = 1;
private:
int a = 0;
int b = 0;
int c = 0;
};
and the static constexpr variable stc
can be used where the compiler can directly substitute the value of the member i.e
int main () {int array[test::stc];}
However, if used in a context where the value cannot be directly substituted by the compiler:
int main() { const int &cs = test::stc; }
then the compiler (clang) generates an error
c++ -std=c++11 -pedantic t.cpp -o t
Undefined symbols for architecture x86_64:
"test::stc", referenced from:
_main in t-a8ee2a.o
ld: symbol(s) not found for architecture x86_64
unless the static member is defined outside the class like so:
constexpr int test::stc;
Why is this the case?
See Question&Answers more detail:os