80 lines · plain
1//-*- C++ -*-2 3// Intended to exercise all syntactic parts of the C++ language that4// aren't part of C.5 6namespace std {7 namespace debug {8 }9}10 11using namespace std::debug;12using namespace std;13 14namespace safestl = ::std::debug;15 16class Base1 { 17};18 19class Base2 { };20 21class Derived1 : Base1, virtual public Base2 { };22 23/* Template classes, template functions */24enum E1 { EC1 };25template <E1 v> class C1 {};26template <E1 v> C1<v> f1() { return C1<v>(); }27void f2() { f1<EC1>(); }28 29// Friend declarations30struct FriendlyStruct {31 friend bool operator==(FriendlyStruct, FriendlyStruct) { return true; }32 friend struct FriendedStruct;33};34 35struct FriendedStruct { };36 37// Using declaration38namespace provider {39 void foo();40}41namespace user {42 using provider::foo;43}44 45// Empty declaration46;47 48// Template specialization declarations49template<typename T> class ClassTemplateSpecialization;50 51template<>52class ClassTemplateSpecialization<bool> { };53 54template<typename T, bool> struct ClassTemplatePartialSpecialization;55 56template<typename T>57struct ClassTemplatePartialSpecialization<T, true> { };58 59// Access specifier60struct AccessSpec {61private:62};63 64// Variable template65template <typename T> T varTemplate = 0;66 67static_assert(true, "");68 69// Concepts70template<typename T> concept True = true;71template<typename T> concept Concept = requires (T a) {72 a;73 { a() } noexcept -> True;74 requires false || true;75 typename T::type;76};77template<typename T> void constrained1() requires Concept<T>;78template<Concept T> void constrained2();79void constrained3(Concept auto x);80