https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34810
--- Comment #10 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Oh this: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#318 In a lookup in which the constructor is an acceptable lookup result, 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. [Note: For example, the constructor is not an acceptable lookup result in an elaborated type specifier so the constructor would not be used in place of the injected class name.] So the question becomes is typename is enough here.