[comp.lang.c++] Scope of enum literals in C++

schmidt@crimee.ics.uci.edu (01/03/89)

Hi,

  I would really appreciate it if someone would clarify the following
obscure C++ point regarding the scope of enumerated types declared in
the public section of structs and/or classes.

  Here is some code illustrating my question:

----------------------------------------
struct foo {
   enum { FOO, BAR };   
};

main ( ) {
   int i = foo::FOO;
}
----------------------------------------

  This example is derived from code presented on page 310 of Stroustrup
and Lippman's article regarding ``Pointers to Class Members in C++,''
specifically the last line of code on that page:

MyScreen.pmfSet(Screen::HEIGHT);

where HEIGHT was declared as an anonymous enumerated type literal in
the public section of class Screen:

class Screen {

public:
        enum { WIDTH, HEIGHT };

        // ...
}

Unfortunately, cfront 1.2.1 doesn't like either my example, nor the
code from the article, complaining that:

----------------------------------------
"foo.C", line 7: error:  foo::FOO is private
1 error
----------------------------------------

( a rather strange error message for a struct! )

In any case, my question is of course, is the above code now
considered valid C++?  

In a similar vein, should the following also be considered correct?

----------------------------------------
struct foo {
   enum { FOO, BAR };   
};

main ( ) {
   int i = FOO; // note the lack of a qualifying context for FOO
}
----------------------------------------

My guess would be *no*, but I'm curious to know for sure.

thanks,

   Doug Schmidt
--
schmidt@ics.uci.edu (ARPA) |   Per me si va nella citta' dolente.
office: (714) 856-4043     |   Per me si va nell'eterno dolore.
                           |   Per me si va tra la perduta gente.
                           |   Lasciate ogni speranza o voi ch'entrate.