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