This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 110b. See for the official list.


1000. Mistaking member typedefs for constructors

Section:  [class.qual]     Status: CD2     Submitter: Jason Merrill     Date: 20 November, 2009

[Voted into WP at March, 2010 meeting.]

The recent addition to support inherited constructors changed [class.qual] paragraph 2 to say that

if the name specified after the nested-name-specifier is the same as the identifier or the simple-template-id's template-name in the last component of the nested-name-specifier,

the qualified-id is considered to name a constructor. This causes problems for a common naming scheme used in some class libraries:

  struct A {
    typedef int type;
  struct B {
    typedef A type;
  B::type::type t;

This change causes this to name the A constructor instead of the A::type typedef.

Proposed resolution (February, 2010):

Change [class.qual] paragraph 2 as follows:

In a lookup in which the constructor is an acceptable lookup result and the nested-name-specifier nominates a class C:

the name is instead considered to name the constructor of class C...