Dependent names

Inside the definition of a template (both class template and function template), the meaning of some constructs may differ from one instantiation to another. In particular, types and expressions may depend on types of type template parameters and values of non-type template parameters.

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
CWG 206C++98it was unspecified at what point semantic constraints areapplied when a type used in a non-dependent name isincomplete at the point at which a template is defined but iscomplete at the point at which an instantiation is performedthe program is ill-formedand no diagnostic isrequired in this case
CWG 224C++98the definition of dependent types was basedon the form of the name rather than lookupdefinition revamped
CWG 382C++98the typename disambiguator was only allowed in template scopealso allowed outsideof templates
CWG 468C++98the template disambiguator was only allowed in template scopealso allowed outsideof templates
CWG 502C++98it was unspecified whether nested enumerations are dependentdependent as nested classes
CWG 1047C++98typeid expressions were never value-dependentvalue-dependent if theoperand is type-dependent
CWG 1160C++98it was unspecified whether a name refers to the current instantiationwhen a template-id matching a primary template or partialspecialization appears in the definition of a member of the templatespecified
CWG 1413C++98uninitialized static data member, static member function, and addressof member of a class template were not listed as value-dependentlisted
CWG 1471C++98a nested type of a non-dependent base ofthe current instantiation was dependentit is not dependent
CWG 1850C++98the list of cases that meaning may change between thedefinition context and the point of instantiation was incompletemade complete
CWG 1929C++98it was not clear whether the template disambiguator canfollow a :: where the name to its left refers to a namespaceallowed
CWG 2066C++98this was never value-dependentit may bevalue-dependent
CWG 2100C++98address of a static data member of classtemplate was not listed as value-dependentlisted
CWG 2109C++98type-dependent identifier expressions might not be value-dependentthey are alwaysvalue-dependent
CWG 2276C++98a function type whose exception specificationis value-dependent was not a dependent typeit is
CWG 2307C++98a parenthesized non-type template parameter used as atemplate argument was equivalent to that template parameternot equivalent anymore
CWG 2457C++11a function type with function parameterpack was not a dependent typeit is
CWG 2785C++20requires expressions might be type-dependentthey are nevertype-dependent
CWG 2905C++11a noexcept expression was only value-dependentif its operand is value-dependentit is value-dependentif its operand involvesa template parameter
CWG 2936C++98the names of local classes of templatedfunctions were not part of the current instantiationthey are