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



             Bug #: 55809

           Summary: Doesn't differentiate elaborated type specifier and

                    typename specifier in dependent types

    Classification: Unclassified

           Product: gcc

           Version: unknown

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: c++

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: schaub.johan...@googlemail.com





The following looks well-formed



template<typename T, typename T::X *> void f() { } 

template<typename T, class T::X *> void f() { } 



struct A { typedef int X; }; 

struct B { void X(); class X { }; }; 



class B::X x1; 

int x2; 



int main() { f<A, &x2>(); f<B, &x1>(); }



But GCC shouts:



  prog.cpp:1:94: error: redefinition of 'template<class T, class T::X*

<anonymous> > void f()'

  prog.cpp:1:46: error: 'template<class T, typename T::X* <anonymous> > void

f()' previously declared here



Related Bugreport (responsible for accepting the above testcase too, when it's

fixed): http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48920 . 



Clang accepts the above code, so my statement in PR48920 that the Itanium ABI

does not allow to distiguish between the different signatures appears to be

wrong and GCC should support this code.

Reply via email to