1// PR c++/46105 2 3template< typename T > 4struct empty { // support class is like stripped-down enable_if 5 typedef void type; 6}; 7 8template< class T, typename v = void > // v is always void! 9struct element { 10 typedef typename T::value_type type; 11}; 12 13template< class T > // T in deduced context, T::element_type is SFINAE: 14struct element< T, typename empty< typename T::element_type >::type > { 15 typedef typename T::element_type type; 16}; 17 18template< class T > 19struct element< T const, typename empty< typename T::element_type >::type > { 20 typedef typename T::element_type const type; 21}; 22 23struct has_et { 24 typedef int element_type; 25}; 26 27element<has_et const>::type ip = 0; 28