https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63739
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- This is the correct behaviour required by the standard. std::pair is not a type, so you cannot say "using std::pair::pair" In a non-template you can say "using pair::pair" which finds the injected class name from the base class. In a template when std::pair<A,B> is a dependent base class the injected class name is not visible because name lookup does not consider dependent base classes, so you cannot say "using pair::pair"