------- Comment #5 from fang at csl dot cornell dot edu 2007-05-12 16:53 ------- Subject: Re: fail to link to static const double
> ------- Comment #3 from dennis0yang at gmail dot com 2007-05-12 09:29 ------- > Subject: Re: fail to link to static const double > > I understand that the standard only specifies that static const for > integral type can be assigned within the class. My point is that if gcc > decides to allow the extension of assigning static const double within > the class (good extension, I don't see why this is not in the > standard.), then it should allow me to link to it. Note the code works > if I change "y=-x" to "y= -1 * x", so it is clearly a bug. To *link* to something correctly with a reference, you need EXACTLY ONE definition, same as in C. An in-class declaration is not a definition. It cannot be treated as such because you'd end up with a definition in each translation unit that includes the header (multiply defined). The cases in which the compile/link 'worked' for you were cases in which the compiler substituted the value for the reference (you got lucky). I don't know the heuristics for the decision, maybe ask someone familiar with the constant-folding opt. > I also tried your suggestion before submitting the bug report. It does > work. But I really do not want to create a .cpp file just to put that > one line in it, much prefer to leave everything in the .h file. Defining it once in a .cpp file is the correct thing to do, even if it is inconvenient. Hope this helps. > fang at csl dot cornell dot edu wrote: > > ------- Comment #1 from fang at csl dot cornell dot edu 2007-05-12 09:06 > > ------- > > You need to define Base::x out of class in some translation unit, the > > in-class > > declaration alone isn't enough, though sometimes the compiler will elide the > > reference to it if its value is known (optimization). > > > > const double Base::x = 1.0; -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31904