[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / clang / test / Coverage / cxx-language-features.inc
blob4eaba456f8845baae280b913793679e2fd80abea
1 //-*- C++ -*-
3 // Intended to exercise all syntactic parts of the C++ language that
4 // aren't part of C.
6 namespace std {
7   namespace debug {
8   }
11 using namespace std::debug;
12 using namespace std;
14 namespace safestl = ::std::debug;
16 class Base1 { 
19 class Base2 { };
21 class Derived1 : Base1, virtual public Base2 { };
23 /* Template classes, template functions */
24 enum E1 { EC1 };
25 template <E1 v> class C1 {};
26 template <E1 v> C1<v> f1() { return C1<v>(); }
27 void f2() { f1<EC1>(); }
29 // Friend declarations
30 struct FriendlyStruct {
31   friend bool operator==(FriendlyStruct, FriendlyStruct) { return true; }
32   friend struct FriendedStruct;
35 struct FriendedStruct { };
37 // Using declaration
38 namespace provider {
39   void foo();
41 namespace user {
42   using provider::foo;
45 // Empty declaration
48 // Template specialization declarations
49 template<typename T> class ClassTemplateSpecialization;
51 template<>
52 class ClassTemplateSpecialization<bool> { };
54 template<typename T, bool> struct ClassTemplatePartialSpecialization;
56 template<typename T>
57 struct ClassTemplatePartialSpecialization<T, true> { };
59 // Access specifier
60 struct AccessSpec {
61 private:
64 // Variable template
65 template <typename T> T varTemplate = 0;
67 static_assert(true, "");
69 // Concepts
70 template<typename T> concept True = true;
71 template<typename T> concept Concept = requires (T a) {
72   a;
73   { a() } noexcept -> True;
74   requires false || true;
75   typename T::type;
77 template<typename T> void constrained1() requires Concept<T>;
78 template<Concept T> void constrained2();
79 void constrained3(Concept auto x);