>From: "Gennaro Prota" <[EMAIL PROTECTED]>

> On Wed, 8 Jan 2003 01:23:05 +0100, Terje Slettebų
> <[EMAIL PROTECTED]> wrote:
>
> >>From: "Gennaro Prota" <[EMAIL PROTECTED]>
>
> >> It *may* need out-of-class definition, as you say.
> >
> >Actually, it's pretty clear that in this case, the out-of-class
definition
> >is required.
>
> Indeed.
>
> > Intel C++ 7.0, running in strict mode, certainly needs it. It
> >gives a link-error without it, for the program I gave. GCC 3.2 gives a
> >link-error, as well.
> >
> >> This could also be a boost FAQ ;-)
> >>     http://lists.boost.org/MailArchives/boost/msg35797.php
> >
> >I am well aware of the DR that allows static const in-class
initialisation
> >to omit having an external definition (I read that DR item, earlier
_today_,
> >:) as I was browsing through the list), and I've also read that posting,
> >earlier, so this was nothing new to me. Don't you think I know this? :)
>
> Sure you do. It's just that being a little tired (it's 2.00 AM here) I
> didn't read your whole post. Of course this means that I shouldn't
> have replied, but my intent was to be useful, by pointing out the DR.
> Sorry.

No problem. :) I hope you didn't mind my posting, either. I kind of just
replied the same way. :)

> BTW I've seen that compilers tend to not follow the new wording
> of 3.2 literally. For instance with most compilers I guess this
> compiles fine thanks to the conversion to rvalue made by static_cast
>
>   struct Test
>   {
>       static const int value=1 ;
>   };
>
>   //const int Test::value;
>
>   void f(const int &)
>   {
>   }
>
>   int main()
>   {
>     f( static_cast<int> (Test::value) );
>   }
>
>
> despite the fact that the expression Test::value is, as far as I
> understand the standard, potentially evaluated. I think this is more a
> problem in the standard than in the compilers though, because this
> behavior appears natural to me.

Intel C++ accepts it, at least, and gives the following remark:

remark #383: value copied to temporary, reference to temporary used
    f( static_cast<int> (Test::value) );
       ^
Yeah. It's not easy to see if making a copy constitutes "use" (which also
happens in pass by value, of course). It seems compilers typically don't
consider it "use".


Regards,

Terje

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to