diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp2a/concepts-requires20.C')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp2a/concepts-requires20.C | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-requires20.C b/gcc/testsuite/g++.dg/cpp2a/concepts-requires20.C new file mode 100644 index 00000000000..089db2ba013 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-requires20.C @@ -0,0 +1,65 @@ +// { dg-do compile { target c++2a } } + +template<typename ...> +constexpr bool r () { return true; } + +template<typename ... Ts> + requires r<Ts...>() // { dg-error "enclose" } +void f() { } + +template<typename T, T N> + requires ++N // { dg-error "enclose" } +void f() { } + +template<typename T, T N> + requires N++ // { dg-error "enclose" } +void f() { } + +template<typename T, T N> + requires N == 0 // { dg-error "enclose" } +void f() { } + +template<typename T, T N> + requires N ? true : false // { dg-error "enclose" } +void f() { } + +template<typename T, T N> + requires N = 0 // { dg-error "enclose" } +void f() { } + +template<typename T, T N> + requires N + 1 // { dg-error "enclose" } +void f() { } + +template<typename T, T N> + requires N - 1 // { dg-error "enclose" } +void f() { } + +template<typename T, T N> + requires N.x // { dg-error "enclose" } +void f() { } + +template<typename T, T N> + requires N->x && true // { dg-error "enclose" } +void f() { } + +template<typename T, T N> + requires N && N +void f() { } + +template<typename T, T N> + requires N || N +void f() { } + +template<typename T, T N> + requires N || !N // { dg-error "enclose" } +void f() { } + +template<typename T, T N> + requires N[0] // { dg-error "enclose" } +void f() { } + +template<typename T, T N> + requires static_cast<bool>(N) // { dg-error "enclose" } +void f() { } + |