messages private members

Gabriel Dos Reis gdr@integrable-solutions.net
Thu Oct 2 22:27:00 GMT 2003


Benjamin Kosnik <bkoz@redhat.com> writes:

| >--- config/locale/gnu/messages_members.h	2 Oct 2003 21:12:46 -0000
| >***************
| >*** 39,45 ****
| >       : facet(__refs)
| >       {  
| >  #if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2))
| >!        _M_name_messages = _S_c_name;
| >  #endif
| >         _M_c_locale_messages = _S_get_c_locale(); 
| >       }
| >--- 39,45 ----
| >       : facet(__refs)
| >       {  
| >  #if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2))
| >!        _M_name_messages = _S_get_c_name();
| >                           ^^
| >
| >needs "messages<_CharT>::" to become dependent (still better,
| >"locale::facet::"), or else error. 
| 
| Agreed, locale::facet:: would be preferred, but I see no compilation
| error.

You should.  

The reason is that if you do a name lookup for _S_get_c_name in the
above expression, then you can't see one.  The only place you'll see
it is in the dependent base class messages<_CharT>, into which the
compiler should not look.  Therefore you get an error.

| More to the point, why don't I see any of this? I rebuilt with
| today's CVS for gcc, and have configured the generic locale (verfied)
| which has this issue in time_members.h. No errors, successful
| compilation. Also, if you are having the above problem in
| messages_members.h and not time_members.h something is very wrong. What
| gives, again?

The reason the error does not appear in time_members.h is that
locale::facet is a NON-dependent base of __timepunct so usual name 
lookup looks there and find it.  
That is not the case for messages_byname<_CharT> which has the
dependent  base class messages<_CharT>.

| 
| Are you using today's CVS cc1plus? 

Yes.

-- Gaby



More information about the Libstdc++ mailing list