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 ‘void C<T>::f()’: t.cpp:10: error: no match for call to ‘(B2) ()’ "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