diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-01-22 11:03:54 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-01-22 11:03:54 +0000 |
commit | 9935a0ba17c6509632c64b51fe5e28ddb3679022 (patch) | |
tree | 542066d88458ded64aefbc0b8bed8648f6f8132b /gcc | |
parent | 06b94aa16c567fe80afeccec8b2b8a15ca7f4ef5 (diff) | |
download | gcc-9935a0ba17c6509632c64b51fe5e28ddb3679022.tar.gz |
2016-01-22 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/55843
* g++.dg/template/pr55843.C: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@232721 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/pr55843.C | 27 |
2 files changed, 32 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cdffd241369..29a048df7ff 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-01-22 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/55843 + * g++.dg/template/pr55843.C: New. + 2016-01-22 Alan Lawrence <alan.lawrence@arm.com> PR testsuite/66877 diff --git a/gcc/testsuite/g++.dg/template/pr55843.C b/gcc/testsuite/g++.dg/template/pr55843.C new file mode 100644 index 00000000000..e1691d5a5b0 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/pr55843.C @@ -0,0 +1,27 @@ +// { dg-options "-ftemplate-depth-8" } + +template< typename T > struct type_wrapper { +}; +typedef char (&yes_tag)[2]; +template<bool b> struct if_c { +}; +template< typename T > struct has_type { + struct gcc_3_2_wknd { + template< typename U > static yes_tag test( type_wrapper<U> const volatile* +, type_wrapper<typename U::type>* = 0 ); + }; + typedef type_wrapper<T> t_; + static const bool value = sizeof(gcc_3_2_wknd::test(static_cast<t_*>(0))) == +sizeof(yes_tag); +}; +template <class K, class T, class=void> struct Get_type { +}; +struct FT_tag {}; +struct RT_tag {}; +template <class K> struct Get_type<K, RT_tag, typename if_c< +!has_type<Get_type<K, FT_tag> >::value >::type> { }; +template <class K> struct Get_type<K, FT_tag, typename if_c< +!has_type<Get_type<K, RT_tag> >::value >::type> { }; // { dg-error "depth" } +typedef Get_type<int, FT_tag>::type P; + +// { dg-prune-output "compilation terminated" } |