public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "dennis0yang at gmail dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c++/31904] fail to link to static const double
Date: Sat, 12 May 2007 16:19:00 -0000	[thread overview]
Message-ID: <20070512161937.16318.qmail@sourceware.org> (raw)
In-Reply-To: <bug-31904-14536@http.gcc.gnu.org/bugzilla/>



------- Comment #6 from dennis0yang at gmail dot com  2007-05-12 17:19 -------
Subject: Re:  fail to link to static const double

I understand perfectly well everything you said. But I think you miss 
the point of this bug report.
This is not about the c++ standard in terms of what should and should 
not be done. This is about get rid of the "luck" component in gcc. If 
gcc decides not to support in-class definition for static const double, 
then flag the statement as an error. I really don't see why the compile 
doesn't substitute the value everywhere it see the reference (as you 
mentioned), because it is a static const!

fang at csl dot cornell dot edu wrote:
> ------- 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


  parent reply	other threads:[~2007-05-12 16:19 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-12  1:41 [Bug c++/31904] New: " dennis0yang at gmail dot com
2007-05-12  8:06 ` [Bug c++/31904] " fang at csl dot cornell dot edu
2007-05-12  8:15 ` schwab at suse dot de
2007-05-12  8:29 ` dennis0yang at gmail dot com
2007-05-12  8:33 ` dennis0yang at gmail dot com
2007-05-12 15:53 ` fang at csl dot cornell dot edu
2007-05-12 16:19 ` dennis0yang at gmail dot com [this message]
2007-05-12 16:53 ` fang at csl dot cornell dot edu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070512161937.16318.qmail@sourceware.org \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).