[Bug c++/84832] New: Base class member function incorrectly introduced by using-declarator
jaak at ristioja dot ee
gcc-bugzilla@gcc.gnu.org
Mon Mar 12 14:56:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84832
Bug ID: 84832
Summary: Base class member function incorrectly introduced by
using-declarator
Product: gcc
Version: 7.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jaak at ristioja dot ee
Target Milestone: ---
struct Base {
template <typename T, int = 42>
void f(T &&) const {}
};
struct Derived: Base {
template <typename T, typename X = typename T::asdf>
void f(T &&) const {}
using Base::f;
};
int main() {
Derived const cd;
cd.f('x');
}
The following compiles fine with GCC and -std=c++11, but not with Clang. User
liliscent over at https://stackoverflow.com/q/49235124/3919155 thinks this is a
GCC bug, because Base::f should not be introduced by the using-declarator
because of [namespace.udecl]:
> When a using-declarator brings declarations from a
> base class into a derived class, member functions
> and member function templates in the derived class
> override and/or hide member functions and member
> function templates with the same name, parameter-
> type-list, cv-qualification, and ref-qualifier (if
> any) in a base class (rather than conflicting).
> Such hidden or overridden declarations are excluded
> from the set of declarations introduced by the
> using-declarator.
More information about the Gcc-bugs
mailing list