30 lines · cpp
1// RUN: %clang_cc1 -std=c++2a -x c++ -verify %s2 3template<typename T>4struct X {5 using Y = typename T::invalid;6};7 8template<typename T>9concept Invalid = X<T>{};10 11template<typename T>12concept False = false; // expected-note{{because 'false' evaluated to false}}13 14template<typename T>15concept True = true;16 17// TODO: Concepts: Uncomment trailing requires clauses here when we have correct substitution.18//template<True T>19// requires False<T>20//void g1() requires Invalid<T>;21//22//using g1i = decltype(g1<int>());23 24template<False T> // expected-note{{because 'int' does not satisfy 'False'}}25 requires Invalid<T>26void g2(); // requires Invalid<T>;27// expected-note@-1{{candidate template ignored: constraints not satisfied [with T = int]}}28 29using g2i = decltype(g2<int>());30// expected-error@-1{{no matching function for call to 'g2'}}