class HasFriends { friend void friend_1(HasFriends); friend void friend_2(HasFriends); void private_thing(); }; struct HasNontrivialDefaultConstructor { HasNontrivialDefaultConstructor() = default; HasNontrivialDefaultConstructor(int n = 0); // Ensure this class is not POD but is still trivially-copyable. // This is necessary to exercise the second static_assert below, // because GCC's spec for __has_trivial_constructor is absurd. int m; private: int n; }; static_assert(!__is_trivial(HasNontrivialDefaultConstructor), ""); static_assert(!__has_trivial_constructor(HasNontrivialDefaultConstructor), ""); void *operator new[](__SIZE_TYPE__); extern int mergeUsedFlag; inline int getMergeUsedFlag() { return mergeUsedFlag; } typedef struct { int n; int m; } NameForLinkage; struct HasVirtualFunctions { virtual void f(); }; struct OverridesVirtualFunctions : HasVirtualFunctions { void f(); }; extern "C" void ExternCFunction(); typedef struct { struct Inner { int n; }; } NameForLinkage2; auto name_for_linkage2_inner_a = NameForLinkage2::Inner(); typedef decltype(name_for_linkage2_inner_a) NameForLinkage2Inner; namespace Aliased { extern int a; } namespace Alias = Aliased; struct InhCtorA { InhCtorA(int); }; struct InhCtorB : InhCtorA { using InhCtorA::InhCtorA; }; struct ClassWithVBases : HasFriends, virtual HasNontrivialDefaultConstructor { int n; }; struct ClassWithVBases;