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?
const &cs...gives an error:error: ISO C++ forbids declaration of 'cs' with no type [-fpermissive]