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
next prev 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).