Вы можете использовать BOOST_MPL_HAS_XXX_TRAIT_DEF , в Boost.MPL:
BOOST_MPL_HAS_XXX_TRAIT_DEF( required_type )
BOOST_MPL_ASSERT(( has_required_type< PossibleArg > ));
BOOST_MPL_HAS_XXX_TRAIT_DEF является макросом, принимающим в качестве параметра имя xxx
, которое генерирует метафункцию has_xxx< T >
, которая оценивается как true, если T определяет вложенный тип с именем xxx
.
(Обратите внимание, что метафункция MPL - это функция времени компиляции, доступ к которой можно получить с помощью ::type
. Результатом в этом случае является логическая константа времени компиляции (т. Е. bool_ .)