From: "Alex J. Dam" <alexjdam@gmail.com>
To: gcc-help@gcc.gnu.org
Subject: Re: C++ static integer class constants...
Date: Sun, 16 Oct 2005 17:43:00 -0000 [thread overview]
Message-ID: <20051016174434.GB3165@hymen> (raw)
In-Reply-To: <43528310.03f34613.6a05.0e40SMTPIN_ADDED@mx.gmail.com>
On Sun, Oct 16, 2005 at 11:42:48AM -0500, John Ratliff wrote:
> I don't see anywhere that I'm taking the address of A or B. I don't see why
> they should need storage space here. Am I doing something wrong in my
> program?
After reading Ryan's post, I looked at the (draft) standard. It says:
4 If a static data member is of const integral or const enumeration
type, its declaration in the class definition can specify a constant-
initializer which shall be an integral constant expression
(_expr.const_). In that case, the member can appear in integral con-
stant expressions within its scope. The member shall still be defined
in a namespace scope if it is used in the program and the namespace
scope definition shall not contain an initializer.
If I understand this correctly, even const static members need to have
a definition somewhere. Maybe this is "needed" so that you may always
take the address of such const static members.
So the compiler is free to use the constant as if they were variables,
if it needs to. Your code compiles OK if the line
int offset = (redundant ? B : A);
is replaced by
if(redundant)
offset = B;
else
offset = A;
I don't know why, but it does work here.
So you need to define those constants somewhere, but the compiler may
use the initializer in the class scope, if it is able to do so. For
some reason, GCC couldn't use the initializer in the first case, so it
is using the address of the constants. Go figure.
--
Alex J. Dam
next prev parent reply other threads:[~2005-10-16 17:43 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-10-16 15:26 Ryan Mansfield
2005-10-16 16:16 ` John Ratliff
2005-10-16 16:16 ` John Ratliff
2005-10-16 16:42 ` John Ratliff
2005-10-16 16:42 ` John Ratliff
[not found] ` <43528310.03f34613.6a05.0e40SMTPIN_ADDED@mx.gmail.com>
2005-10-16 17:43 ` Alex J. Dam [this message]
[not found] ` <4352a3b2.42389977.3b5e.60fdSMTPIN_ADDED@mx.gmail.com>
2005-10-16 19:29 ` Alex J. Dam
2005-10-16 19:53 ` John Ratliff
2005-10-16 19:53 ` John Ratliff
2005-10-16 19:45 ` John Ratliff
2005-10-16 19:45 ` John Ratliff
[not found] <0IOJ0024ULK8BF@emroute1.cind.ornl.gov>
2005-10-18 12:26 ` Ernest L. Williams Jr.
[not found] <87oe5pb5dp.fsf@totally-fudged-out-message-id>
2005-10-17 19:17 ` Florian Weimer
2005-10-18 6:19 ` John Ratliff
2005-10-18 6:19 ` John Ratliff
[not found] <200510160743.j9G7hVoa010304@inbound-smtp-1.corp.adobe.com>
2005-10-17 12:05 ` John Love-Jensen
2005-10-17 17:50 ` John Ratliff
2005-10-17 17:50 ` John Ratliff
[not found] ` <4353e481.0829b6d6.64bd.18a4SMTPIN_ADDED@mx.gmail.com>
2005-10-17 18:07 ` corey taylor
2005-10-17 20:04 ` John Ratliff
2005-10-17 20:04 ` John Ratliff
[not found] <20051016195314.7EFB824AEF5@lax-gw02.mroute.net>
2005-10-17 9:09 ` Nathan Sidwell
2005-10-17 19:21 ` Florian Weimer
[not found] <20051016200125.C061F13137C@arvo.suso.org>
2005-10-16 21:36 ` John Ratliff
2005-10-16 21:36 ` John Ratliff
[not found] <435202e6.3d759d8f.4550.fffff1e6SMTPIN_ADDED@mx.gmail.com>
2005-10-16 14:50 ` Alex J. Dam
2005-10-17 19:13 ` Florian Weimer
-- strict thread matches above, loose matches on Subject: below --
2005-10-16 7:35 John Ratliff
2005-10-16 7:35 John Ratliff
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=20051016174434.GB3165@hymen \
--to=alexjdam@gmail.com \
--cc=gcc-help@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).