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


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.

There are worse things in the C++ standard which are allowed and totally
useless, like a template constructor whose template arguments can't be deduced,
or a partial specialization where the argument are used only in non-deduced
contexts.

Giovanni Bajo



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