Your example is not identical to the one in the defect report. In the defect report, CL
is a class template. However the intent of the proposed resolution is to make the template case the same as the non-template one, aka [basic.scope.pdecl]:
6 After the point of declaration of a class member, the member name
can be looked up in the scope of its class. [ Note: this is true
even if the class is an incomplete class. For example,
struct X {
enum E { z = 16 };
int b[X::z]; // OK
};
— end note ]
Then the proposed resolution:
In 14.6.4.1 [temp.point] paragraph 3 change:
the point of instantiation is immediately before the point of
instantiation of the enclosing template. Otherwise, the point of
instantiation for such a specialization immediately precedes the
namespace scope declaration or definition that refers to the
specialization.
To:
the point of instantiation is the same as the point of
instantiation of the enclosing template. Otherwise, the point of
instantiation for such a specialization immediately precedes the
nearest enclosing declaration. [Note: The point of instantiation is still at namespace scope but any declarations preceding the point of
instantiation, even if not at namespace scope, are considered to have
been seen.]
Add following paragraph 3:
If an implicitly instantiated class template specialization, class
member specialization, or specialization of a class template
references a class, class template specialization, class member
specialization, or specialization of a class template containing a
specialization reference that directly or indirectly caused the
instantiation, the requirements of completeness and ordering of the
class reference are applied in the context of the specialization
reference.
As of the latest draft, the non-template case was and is still valid. The template case is not. However the defect is drafting, which means that the template case is intended to compile.
Drafting: Informal consensus has been reached in the working group and is described in rough terms in a Tentative Resolution, although
precise wording for the change is not yet available.
CL
is not a template. The defect doesn't apply to it. The intent of the defect is to make the case whereCL
is a template the same as your code example. – Heilner