4 struct empty { // support class is like stripped-down enable_if
8 template< class T, typename v = void > // v is always void!
10 typedef typename T::value_type type;
13 template< class T > // T in deduced context, T::element_type is SFINAE:
14 struct element< T, typename empty< typename T::element_type >::type > {
15 typedef typename T::element_type type;
19 struct element< T const, typename empty< typename T::element_type >::type > {
20 typedef typename T::element_type const type;
24 typedef int element_type;
27 element<has_et const>::type ip = 0;