This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: C++ Language Lawyer Question


"Giovanni Bajo" <giovannibajo@libero.it> writes:

| Joel Sherrill wrote:
| 
| > namespace N {
| >    class C {
| >      private:
| >        typedef int T1_t;
| >      protected:
| >        typedef int T2_t;
| >      public:
| >        C();
| >        ~C();
| >        int f1(T1_t);  // private type used for public method
| >        int f2(T2_t);  // protected type used for public method
| >    };
| > }
| >
| > N::C::C() { ; }
| > N::C::~C() { ; }
| > int N::C::f1(T1_t x) { return x+1; }
| > int N::C::f2(T2_t x) { return x+2; }
| >
| > Should this work?  If so, what is the rationale for allowing it.
| 
| Yes, there is nothing wrong with it. The fact that you can't directly name a
| C::T1_t doesn't make the member function useless. For instance, you could have
| a public member function in C which returns a T1_t (so that you can call it
| directly while calling f1()). Or you could call f1() with any other type for
| which there is a default conversion to T1_t.

Yes, you're even able to say

    C().f1(90);

-- Gaby


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]