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 ...> { };