brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 3a465fa Raw
38 lines · cpp
1// RUN: %clang_cc1 %std_cxx98-14 -fsyntax-only -verify=precxx17 %s2// RUN: %clang_cc1 -std=c++17 -fsyntax-only -verify=expected %s3// RUN: %clang_cc1 -std=c++17 -DFAILED_CXX17 -fsyntax-only -verify=failcxx17 %s4// RUN: %clang_cc1 %std_cxx20- -fsyntax-only -verify=cxx20 %s5// expected-no-diagnostics6 7template<class T> auto f(T t) -> decltype(++t); // precxx17-warning {{incrementing expression of type bool is deprecated}}8 9auto f(...) -> void;10void g() { f(true); } // precxx17-note {{while substituting deduced template arguments}}11 12#ifdef FAILED_CXX1713 14template<class T> auto f1(T t) -> decltype(++t); // failcxx17-note {{candidate template ignored: substitution failure [with T = bool]: ISO C++17 does not allow incrementing expression of type bool}}15auto f1(void) -> void; // failcxx17-note {{candidate function not viable: requires 0 arguments, but 1 was provided}}16void g1() { f1(true); } // failcxx17-error {{no matching function for call to 'f1'}}17 18#endif19 20#if __cplusplus >= 202002L21template <class T>22concept can_increment = requires(T t) {23  ++t;24};25 26template <class T>27void f() {28  static_assert(requires(T t) { ++t; }); // cxx20-error {{static assertion failed due to requirement 'requires (bool t) { <<error-expression>>; }'}}29}30 31int main() {32  f<bool>(); // cxx20-note {{in instantiation of function template specialization 'f<bool>' requested here}}33  static_assert(!can_increment<bool>);34 35  return 0;36}37#endif38