58 lines · c
1class HasFriends {2 friend void friend_1(HasFriends);3 friend void friend_2(HasFriends);4 void private_thing();5};6 7struct HasNontrivialDefaultConstructor {8 HasNontrivialDefaultConstructor() = default;9 HasNontrivialDefaultConstructor(int n = 0);10 11 // Ensure this class is not POD but is still trivially-copyable.12 // This is necessary to exercise the second static_assert below,13 // because GCC's spec for __has_trivial_constructor is absurd.14 int m;15private:16 int n;17};18 19static_assert(!__is_trivial(HasNontrivialDefaultConstructor), "");20static_assert(!__has_trivial_constructor(HasNontrivialDefaultConstructor), "");21 22void *operator new[](__SIZE_TYPE__);23 24extern int mergeUsedFlag;25inline int getMergeUsedFlag() { return mergeUsedFlag; }26 27typedef struct {28 int n;29 int m;30} NameForLinkage;31 32struct HasVirtualFunctions {33 virtual void f();34};35struct OverridesVirtualFunctions : HasVirtualFunctions {36 void f();37};38extern "C" void ExternCFunction();39 40typedef struct {41 struct Inner {42 int n;43 };44} NameForLinkage2;45auto name_for_linkage2_inner_a = NameForLinkage2::Inner();46typedef decltype(name_for_linkage2_inner_a) NameForLinkage2Inner;47 48namespace Aliased { extern int a; }49namespace Alias = Aliased;50 51struct InhCtorA { InhCtorA(int); };52struct InhCtorB : InhCtorA { using InhCtorA::InhCtorA; };53 54struct ClassWithVBases : HasFriends, virtual HasNontrivialDefaultConstructor {55 int n;56};57struct ClassWithVBases;58