diff options
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/trailing10.C | 33 |
2 files changed, 38 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3f5f347..37d1853 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-05-12 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/65133 + * g++.dg/cpp0x/trailing10.C: New. + 2015-05-12 Richard Biener <rguenther@suse.de> * gcc.dg/vect/bb-slp-35.c: New testcase. diff --git a/gcc/testsuite/g++.dg/cpp0x/trailing10.C b/gcc/testsuite/g++.dg/cpp0x/trailing10.C new file mode 100644 index 0000000..19ef57f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/trailing10.C @@ -0,0 +1,33 @@ +// PR c++/65133 +// { dg-do compile { target c++11 } } + +template<bool, typename Tp = void> +struct enable_if { }; + +template<typename Tp> +struct enable_if<true, Tp> { typedef Tp type; }; + +template <int I> +struct count +{ + using type = typename count<I-1>::type; +}; + +template <> +struct count<0> +{ + using type = void; +}; + +template <int I> +auto foo(typename enable_if<(I>=0)>::type * + = nullptr) -> typename count<I>::type { } + +template <int I> +void foo(typename enable_if<(I<0)>::type * = nullptr) { } + +int main() +{ + foo<2>(); + foo<-1>(); +} |
