This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21
Core Issues List revision 110d.
See http://www.open-std.org/jtc1/sc22/wg21/ for the official
Differences between definition context and point of instantiation
Section: 13.8 [temp.res]
Submitter: Richard Smith
[Moved to DR at the November, 2014 meeting.]
Various characteristics of entities referred to by a non-dependent
reference in a template can change between the definition context and
the point of instantiation of a specialization of that template. These
include initialization (which affects whether an object can be used
in a constant expression), function and template default arguments,
and the completeness of types. There is implementation divergence
as to whether these are checked in the definition context or at the
point of instantiation. Presumably a rule is needed to make it
ill-formed, no diagnostic required, if the validity of such a
reference changes between the two contexts.
Proposed resolution (February, 2014):
Change 13.8 [temp.res] paragraph 8 as follows:
type used in a non-dependent name is incomplete at the point
at which a template is defined but is complete at the point at which an
instantiation is done, and if the completeness of that type affects whether
or not the program is well-formed or affects the semantics of the
the program is ill-formed; no diagnostic is required.
[Note: If a
template is instantiated...