This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 118e. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2025-11-05
Consider:
template<class T> struct A {
T* p;
A();
~A() {
if (0 < sizeof (T))
delete p;
}
};
struct U;
struct C {
C();
~C();
A<U> u;
};
int main() {
C c;
return 0;
}
The intent is that A<U>::~A is instantiated where the special member functions of C are defined (at which point U is ostensibly complete). Preventing instantiation (and thus avoiding the completeness check) in the present translation unit is necessary for the unique_ptr-based pimpl idiom to work.
Notes from the December, 2016 teleconference:
The problem is that the current wording only connects name lookup with point of instantiation; other semantic checks, such as the requirement for completeness of a class, should also be performed at that point.