diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2015-05-12 09:03:04 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2015-05-12 09:03:04 +0000 |
commit | cb2e147086286e59c24e5eb1528c11bbdfa08d05 (patch) | |
tree | 68c7c8857362798e0a1f2c08891d2d3d754b157e /gcc | |
parent | 731261c3344bcf635a503d4360995a9ca7caa552 (diff) | |
download | gcc-cb2e147086286e59c24e5eb1528c11bbdfa08d05.zip gcc-cb2e147086286e59c24e5eb1528c11bbdfa08d05.tar.gz gcc-cb2e147086286e59c24e5eb1528c11bbdfa08d05.tar.bz2 |
re PR c++/65133 ([C++11] Result type deduction proceeds even though argument deduction fails)
2015-05-12 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/65133
* g++.dg/cpp0x/trailing10.C: New.
From-SVN: r223047
Diffstat (limited to 'gcc')
-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>(); +} |