diff options
Diffstat (limited to 'clang/test/SemaTemplate/cxx2a-constraint-exprs.cpp')
-rw-r--r-- | clang/test/SemaTemplate/cxx2a-constraint-exprs.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/clang/test/SemaTemplate/cxx2a-constraint-exprs.cpp b/clang/test/SemaTemplate/cxx2a-constraint-exprs.cpp new file mode 100644 index 00000000000..a2a7232b4b8 --- /dev/null +++ b/clang/test/SemaTemplate/cxx2a-constraint-exprs.cpp @@ -0,0 +1,17 @@ +// RUN: %clang_cc1 -std=c++2a -verify %s + +// Make sure constraint expressions are unevaluated before being substituted +// into during satisfaction checking. + +template<typename T> constexpr int f() { return T::value; } +template<typename T> concept Foo = false && (f<int>(), true); +bool k = Foo<int>; +template<typename T> requires false && (f<int>(), true) struct S {}; +// expected-note@-1{{because}} +using s = S<int>; // expected-error {{constraints not satisfied}} +template<typename T> void foo() requires false && (f<int>(), true) { }; +// expected-note@-1{{because}} expected-note@-1{{candidate template ignored}} +int a = (foo<int>(), 0); // expected-error{{no matching function}} +template<typename T> void bar() requires requires { requires false && (f<int>(), true); } { }; +// expected-note@-1{{because}} expected-note@-1{{candidate template ignored}} +int b = (bar<int>(), 0); // expected-error{{no matching function}}
\ No newline at end of file |