#define MIXIN_TRAIT_TESTS #ifdef MIXIN_TRAIT_TESTS # include "mixin-traits.hpp" // the `impl' class provides a cast template through the CRTP pattern. // mixins don't do direct inheritance on themselves, // that's what mixin_traits::depends is for. namespace mixins::traits_detail { struct A {}; struct B {}; struct C {}; struct D {}; template<> struct mixin_traits { using depends = tuple<>; }; template<> struct mixin_traits { using depends = tuple; }; template<> struct mixin_traits { using depends = tuple; }; template<> struct mixin_traits { using depends = tuple; }; extern void test1(); void test1() { struct U : B, A {}; struct V : D {}; struct W : C, A {}; struct Q : virtual W, virtual D {}; #if 0 (void)impl(); // W not a mixin (void)impl(); // A (void)impl(); // D => C => A (void)impl(); // D => C => A (void)impl(); // B #else (void)impl(); (void)impl(); (void)impl(); #endif } } // ns mixins::traits_detail #endif