Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/g++.dg/cpp0x/lambda/lambda-sfinae1.C @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 04ced10e8804 |
children |
comparison
equal
deleted
inserted
replaced
131:84e7813d76e9 | 145:1830386684a0 |
---|---|
6 template <typename T, typename U> | 6 template <typename T, typename U> |
7 struct AddRvalueReferenceImpl { typedef T type; }; | 7 struct AddRvalueReferenceImpl { typedef T type; }; |
8 | 8 |
9 template <typename T> | 9 template <typename T> |
10 struct AddRvalueReferenceImpl<T, typename BoolSink<false && | 10 struct AddRvalueReferenceImpl<T, typename BoolSink<false && |
11 [] { // { dg-error "lambda" } | 11 [] { // { dg-error "lambda" "" { target c++17_down } } |
12 extern T &&tref; | 12 extern T &&tref; |
13 }>::type> { | 13 }>::type> { |
14 typedef T &&type; | 14 typedef T &&type; |
15 }; | 15 }; |
16 | 16 |
17 template <typename T> | 17 template <typename T> |
18 struct AddRvalueReference : AddRvalueReferenceImpl<T, void> { }; | 18 struct AddRvalueReference : AddRvalueReferenceImpl<T, void> { }; |
19 | 19 |
20 namespace ImplHelpers { | 20 namespace ImplHelpers { |
21 template <typename T> | 21 template <typename T> |
22 typename AddRvalueReference<T>::type create(void) { } | 22 typename AddRvalueReference<T>::type create(void); |
23 } | 23 } |
24 | 24 |
25 template <typename T, typename U, typename ...Args> | 25 template <typename T, typename U, typename ...Args> |
26 struct IsConstructibleImpl { enum { value = 0 }; }; | 26 struct IsConstructibleImpl { enum { value = 0 }; }; |
27 | 27 |
28 template <typename T, typename ...Args> | 28 template <typename T, typename ...Args> |
29 struct IsConstructibleImpl<T, typename BoolSink<false && | 29 struct IsConstructibleImpl<T, typename BoolSink<false && |
30 [] { // { dg-error "lambda" } | 30 [] { T t( ::ImplHelpers::create<Args>() ...); } // { dg-error "" } |
31 T t( ::ImplHelpers::create<Args>() ...); | 31 >::type, Args ...> { |
32 }>::type, Args ...> { | |
33 enum { value = 1 }; | 32 enum { value = 1 }; |
34 }; | 33 }; |
35 | 34 |
36 template <typename T, typename ...Args> | 35 template <typename T, typename ...Args> |
37 struct IsConstructible : IsConstructibleImpl<T, void, Args ...> { }; | 36 struct IsConstructible : IsConstructibleImpl<T, void, Args ...> { }; |