
Peter Dimov wrote:
Tobias Schwinger wrote:
It is not too clear whether it applies to partial template specialization, since we don't really "form" a type - we just consider a possibitity:
typedef int my_const_function() const;
template<typename T> struct remove_const { typedef T type; };
template<typename T> struct remove_const< T const > { typedef T type; };
// somwhere else remove_const<my_const_function>::type // ill-formed?
Well formed, returns my_const_function.
Wasn't anywhere near obvious to me before reading #295, though...
The specialization doesn't match.
Where do I find it in the standard and/or what should happen in the following two cases? template<typename T> struct remove_member_pointer { typedef T type; }; template<typename T, typename C> struct remove_member_pointer< T C::* > { typedef T type; }; remove_member_pointer< my_const_function >::type // <-- case 1 template<typename T, typename C> struct add_member_pointer { typedef T C::*type; }; class X; add_member_pointer< my_const_function, X >::type // <-- case 2 Thanks, Tobias