#pragma once #include "compat/linkage-macros.hpp" #include "compat/macros.hpp" #include "compat/meta.hpp" #include //namespace mixins::traits_detail { using namespace meta; template using tuple = meta::detail::tuple; template struct mixin_traits { //using depends = tuple<>; }; template struct check_depends_; template struct check_depends_ { using type = std::bool_constant; }; template struct check_depends_ { using b1 = std::is_base_of; using b2 = typename check_depends_::type; using depends = typename mixin_traits::depends; using t1 = cons; using t2 = lift; using b3 = typename t2::type; using type = std::bool_constant; }; #if 0 template static constexpr void check_depends_recursively() { std::is_base_of_v && assert_depends::check_depends() using depends = typename mixin_traits::depends; static_assert(lift>::check_depends()); using car = first; using cdr = rest; check_depends_recursively(); } #endif template class impl { using t1 = typename lift::depends>>::type; static_assert(t1::value); }; //} // ns mixins::traits_detail