This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 115g. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2024-12-16
[Accepted as a DR at the November, 2024 meeting.]
Consider:
template<class T>
void f()
{
struct Y {
using type = int;
};
Y::type y; // error; missing typename
}
Since lookup of Y always finds the local class, regardless of T, the requirement to apply typename is too strict.
Proposed resolution (approved by CWG 2024-11-08):
Change in 13.8.3.2 [temp.dep.type] paragraph 1 as follows:
A name or template-id refers to the current instantiation if it is
- ...
- in the definition of a nested class of a class template, the name of the nested class referenced as a member of the current instantiation,
or- in the definition of a class template partial specialization or a member of a class template partial specialization, the name of the class template followed by a template argument list equivalent to that of the partial specialization (13.7.6 [temp.spec.partial]) enclosed in <> (or an equivalent template alias specialization)
., or- in the definition of a templated function, the name of a local class (11.6 [class.local].