https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34810
--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> --- DR 147 is definitely the defect report here. Reading the new text still gives me questions about the case if typename is used: If the nested-name-specifier nominates a class C, and the name specified after the nested-name-specifier, when looked up in C, is the injected-class-name of C (clause Clause 11 [class]), the name is instead considered to name the constructor of class C. Such a constructor name shall only be used in the declarator-id of a constructor definition that appears outside of the class definition.