// { dg-do run } // Copyright (C) 2000 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 14 Nov 2000 // Bug 635. We failed to emit initializer code for out-of-class defined // static const members of template instantiations. static int inited = 0; static bool setFlag() { inited++; return true; } template struct X { static const bool cflag; static bool flag; static const bool iflag = true; static const bool jflag = true; }; template const bool X::cflag (setFlag ()); template bool X::flag (setFlag ()); template const bool X::iflag; int main () { X a; if (!a.flag) return 1; if (!a.cflag) return 2; if (!a.iflag) return 3; if (!a.jflag) return 5; if (!X::flag) return 5; if (!X::cflag) return 6; if (!X::iflag) return 7; if (!X::jflag) return 8; if (inited != 4) return 9; return 0; } // On platforms that do not have weak symbols, these static data // members must be explicitly instantiated. The iflag and jflag data // members should not have to be explicitly instantiated because their // const-ness should allow the compiler to elide references to the // actual variables. template const bool X::cflag; template bool X::flag; template const bool X::cflag; template bool X::flag;