Consider the following reduced testcase:

template <class T> struct B1 { int i(); };

struct B2 { int i(); };

template <class T> struct C : public B1<T>, public B2
{
        using B2::i;
        void f()
        {
                i();    // fails, should be accepted
                i.i();  // accepted, should fail
        }
};

With today's trunk this gives:

t.cpp: In member function &#8216;void C<T>::f()&#8217;:
t.cpp:10: error: no match for call to &#8216;(B2) ()&#8217;

"i" seems to be resolved as the base class B2, 
as opposed to its member "i()"


-- 
           Summary: [4.2.0 regression] "using Base::member" nonsense
           Product: gcc
           Version: 4.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jan at etpmod dot phys dot tue dot nl
 GCC build triplet: i686-suse-linux
  GCC host triplet: i686-suse-linux
GCC target triplet: i686-suse-linux


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

Reply via email to