[Bug c++/56358] New: [C++11] Erroneous interaction of typedef and inherited constructor declarations

daniel.kruegler at googlemail dot com gcc-bugzilla@gcc.gnu.org
Sat Feb 16 21:11:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56358

             Bug #: 56358
           Summary: [C++11] Erroneous interaction of typedef and inherited
                    constructor declarations
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: daniel.kruegler@googlemail.com


The following code - compiled with the flags

-pedantic-errors -std=c++11 -Wall

is rejected by gcc 4.8.0 20130210 (experimental):

//----------------------------------
template<class T>
struct A {};

template<class T>
struct B1 : A<T> {
  typedef A<T> super_t;
  using A<T>::A; // #7
};

template<class T>
struct B2 : A<T> {
  using A<T>::A;
  typedef A<T> super_t; // #13
};
//----------------------------------

"7|error: declaration of 'using A<T>::A' [-fpermissive]|
2|error: changes meaning of 'A' from 'struct A<T>' [-fpermissive]|
13|error: 'A' does not name a type|
13|note: (perhaps 'typename A<T>::A' was intended)"

It could be related to bug 56323, but I have currently no way to verify this
hypotheses.

My understanding is that both definitions of B1 and B2 should be valid. Note
that even though the typedefs referring to A<T> are needed to produce the
error, even though at least in B1 its effects are completely unexpected.



More information about the Gcc-bugs mailing list