Home | History | Annotate | Download | only in dcl.spec.concept
      1 // RUN:  %clang_cc1 -std=c++14 -fconcepts-ts -fcxx-exceptions -x c++ -verify %s
      2 
      3 namespace A {
      4   template<typename T> concept bool C1() { return true; }
      5 
      6   template<typename T> concept bool C2 = true;
      7 }
      8 
      9 template<typename T> concept bool C3() { return (throw 0, true); }
     10 static_assert(noexcept(C3<int>()), "function concept should be treated as if noexcept(true) specified");
     11 
     12 template<typename T> concept bool D1(); // expected-error {{function concept declaration must be a definition}}
     13 
     14 struct B {
     15   template<typename T> concept bool D2() { return true; } // expected-error {{concept declarations may only appear in namespace scope}}
     16 };
     17 
     18 struct C {
     19   template<typename T> static concept bool D3 = true; // expected-error {{concept declarations may only appear in namespace scope}}
     20 };
     21 
     22 concept bool D4() { return true; } // expected-error {{'concept' can only appear on the definition of a function template or variable template}}
     23 
     24 concept bool D5 = true; // expected-error {{'concept' can only appear on the definition of a function template or variable template}}
     25 
     26 template<typename T>
     27 concept bool D6; // expected-error {{variable concept declaration must be initialized}}
     28 
     29 template<typename T>
     30 concept bool D7() throw(int) { return true; } // expected-error {{function concept cannot have exception specification}}
     31 
     32 // Tag
     33 concept class CC1 {}; // expected-error {{'concept' can only appear on the definition of a function template or variable template}}
     34 concept struct CS1 {}; // expected-error {{'concept' can only appear on the definition of a function template or variable template}}
     35 concept union CU1 {}; // expected-error {{'concept' can only appear on the definition of a function template or variable template}}
     36 concept enum CE1 {}; // expected-error {{'concept' can only appear on the definition of a function template or variable template}}
     37 template <typename T> concept class TCC1 {}; // expected-error {{'concept' can only appear on the definition of a function template or variable template}}
     38 template <typename T> concept struct TCS1 {}; // expected-error {{'concept' can only appear on the definition of a function template or variable template}}
     39 template <typename T> concept union TCU1 {}; // expected-error {{'concept' can only appear on the definition of a function template or variable template}}
     40 typedef concept int CI; // expected-error {{'concept' can only appear on the definition of a function template or variable template}}
     41 void fpc(concept int i) {} // expected-error {{'concept' can only appear on the definition of a function template or variable template}}
     42 
     43 concept bool; // expected-error {{'concept' can only appear on the definition of a function template or variable template}}
     44