#include "TestMFHasTypeCheckTypedef.hpp" #include int main() { using namespace boost::mpl::placeholders; // You can always instantiate without compiler errors tti::mf_has_type < tti::TheInteger<_,_>, tti::member_type_BType, boost::mpl::identity > aVar; tti::mf_has_type < tti::mtfc_has_type_NoOtherType, boost::mpl::identity, boost::mpl::identity > aVar2; // Compile time asserts BOOST_MPL_ASSERT((tti::mf_has_type < tti::has_type_AnIntType<_,_>, boost::mpl::identity, boost::mpl::identity > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::NameStruct<_,_>, boost::mpl::identity, tti::member_type_AStructType > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::has_type_AnIntTypeReference<_,_>, boost::mpl::identity, boost::mpl::identity > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::has_type_BType<_,_>, boost::mpl::identity, tti::member_type_BType > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::TheInteger<_,_>, tti::member_type_BType, boost::mpl::identity > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::has_type_CType<_,_>, tti::member_type_BType, tti::mf_member_type < tti::member_type_CType<_>, tti::member_type_BType > > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::has_type_AnotherIntegerType<_,_>, tti::mf_member_type < tti::member_type_CType<_>, tti::member_type_BType >, boost::mpl::identity > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::SomethingElse<_,_>, boost::mpl::identity, tti::member_type_AnIntType > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::mtfc_has_type_AnIntType, boost::mpl::identity, boost::mpl::identity > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::MFunctionNameStruct, boost::mpl::identity, tti::member_type_AStructType > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::mtfc_has_type_AnIntTypeReference, boost::mpl::identity, boost::mpl::identity > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::mtfc_has_type_BType, boost::mpl::identity, tti::member_type_BType > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::MFCTheInteger, tti::member_type_BType, boost::mpl::identity > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::mtfc_has_type_CType, tti::member_type_BType, tti::mf_member_type < tti::member_type_CType<_>, tti::member_type_BType > > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::mtfc_has_type_AnotherIntegerType, tti::mf_member_type < tti::mtfc_member_type_CType, tti::member_type_BType >, boost::mpl::identity > )); BOOST_MPL_ASSERT((tti::mf_has_type < tti::FClassSomethingElse, boost::mpl::identity, tti::member_type_AnIntType > )); return 0; }