Cannot compile with -O0 or -O1, or without specifing optimization. 1.c: #include <iostream>
struct X { static const int ABC = 1; static const int DEF = 2; }; int main(int argc, char * argv[]) { std::cout << (argc > 1 ? X::ABC : X::DEF) << std::endl; } > g++ 1.cpp /tmp/cc49NOpp.o: In function `main': 1.cpp:(.text+0x18d): undefined reference to `X::ABC' 1.cpp:(.text+0x197): undefined reference to `X::DEF' collect2: ld returned 1 exit status The same result on gcc-4.2, 4.3, 4.4 > g++ -v Reading specs from /usr/lib/gcc/i486-slackware-linux/4.2.3/specs Target: i486-slackware-linux Configured with: ../gcc-4.2.3/configure --prefix=/usr --enable-shared --enable-languages=ada,c,c++,fortran,java,objc --enable-threads=posix --enable-__cxa_atexit --disable-checking --with-gnu-ld --verbose --with-arch=i486 --target=i486-slackware-linux --host=i486-slackware-linux Thread model: posix gcc version 4.2.3 > g++-4.3 -v Using built-in specs. Target: i686-pc-linux-gnu Configured with: ../gcc-4.3.1/configure --prefix=/usr/local/gcc-4.3.1 Thread model: posix gcc version 4.3.1 (GCC) > g++-4.4 -v Using built-in specs. Target: i686-pc-linux-gnu Configured with: ../gcc-4.4-20080808/configure --prefix=/usr/local/gcc-4.4-20080808 Thread model: posix gcc version 4.4.0 20080808 (experimental) (GCC) -- Summary: Undefined reference to static const member in var = condition ? X::A : X::B Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: wjaczews at o2 dot pl http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37175