Struct template noinvoke
boost::proto::noinvoke — A type annotation in an ObjectTransform which instructs
Proto not to look for a nested ::type within
T after type substitution.
Synopsis
template<typename T>
struct noinvoke {
};
Description
Объектные преобразованияоцениваются по<proto::make<>>, который находит все вложенные преобразования и заменяет их результатом их применения. Если какие-либо замены выполняются, результат сначала считается метафункцией, которая должна быть применена; то есть Прото проверяет, имеет ли результат вложенный<::type>типдеф. Если это произойдет, то это станет результатом. Цель<proto::noinvoke<>>состоит в том, чтобы помешать Прото искать вложенную<::type>типдеф в этих ситуациях.
Пример:
struct Test
: proto::when<
_
, proto::noinvoke<
boost::remove_pointer<
boost::add_pointer<_>
>
>()
>
{};
void test_noinvoke()
{
typedef proto::terminal<int>::type Int;
BOOST_MPL_ASSERT((
boost::is_same<
boost::result_of<Test(Int)>::type
, boost::remove_pointer<Int *>
>
));
Int i = {42};
boost::remove_pointer<Int *> t = Test()(i);
}