diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/template/partial12.C')
-rw-r--r-- | gcc/testsuite/g++.dg/template/partial12.C | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/template/partial12.C b/gcc/testsuite/g++.dg/template/partial12.C new file mode 100644 index 000000000..05a3eca97 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/partial12.C @@ -0,0 +1,27 @@ +// PR c++/46105 + +template< typename T > +struct empty { // support class is like stripped-down enable_if + typedef void type; +}; + +template< class T, typename v = void > // v is always void! +struct element { + typedef typename T::value_type type; +}; + +template< class T > // T in deduced context, T::element_type is SFINAE: +struct element< T, typename empty< typename T::element_type >::type > { + typedef typename T::element_type type; +}; + +template< class T > +struct element< T const, typename empty< typename T::element_type >::type > { + typedef typename T::element_type const type; +}; + +struct has_et { + typedef int element_type; +}; + +element<has_et const>::type ip = 0; |