Created on 2013-09-19.00:00:00 last changed 121 months ago
Additional note, November, 2014:
See also paper N4090.
Notes from the February, 2014 meeting:
CWG decided that partial specialization declarations should be instantiated only when needed to determine whether the partial specialization matches or not.
According to 13.7.6.4 [temp.spec.partial.member] paragraph 2,
If a member template of a class template is partially specialized, the member template partial specializations are member templates of the enclosing class template; if the enclosing class template is instantiated (13.9.2 [temp.inst], 13.9.3 [temp.explicit]), a declaration for every member template partial specialization is also instantiated as part of creating the members of the class template specialization.
Does this imply that only partial specializations of member templates that are declared before the enclosing class is instantiated are considered? For example, in
template<typename A> struct X { template<typename B> struct Y; }; template struct X<int>; template<typename A> template<typename B> struct X<A>::Y<B*> { int n; }; int k = X<int>::Y<int*>().n;
is the last line valid? There is implementation variance on this point. Similarly, for an example like
template<typename A> struct Outer { template<typename B, typename C> struct Inner; }; Outer<int> outer; template<typename A> template<typename B> struct Outer<A>::Inner<typename A::error, B> {};
at what point, if at all, is the declaration of the partial specialization instantiated? Again, there is implementation variance in the treatment of this example.
History | |||
---|---|---|---|
Date | User | Action | Args |
2014-11-24 00:00:00 | admin | set | messages: + msg5221 |
2014-03-03 00:00:00 | admin | set | messages: + msg4893 |
2014-03-03 00:00:00 | admin | set | status: open -> drafting |
2013-09-19 00:00:00 | admin | create |