повысить хана index_if и ввести

Интересно, почему в этом коде тип i является пустым необязательным.

auto t = boost::hana::make_tuple(boost::hana::type_c<int>, boost::hana::type_c<double>);
auto i = boost::hana::index_if(t, boost::hana::is_a<boost::hana::type<double>>);

Для меня это должно быть optional<hana::size_t<1>>

Я знаю, что есть Boost hana получить индекс первого совпадения, но это не совсем тот же вопрос


person Antoine Morrier    schedule 18.09.2018    source источник


Ответы (1)


boost::hana::is_a возвращает, соответствует ли тег объекта заданному тегу. [ссылка]

Вы не передаете ему тег, вместо этого вы передаете ему hana::type.

Например, вы можете проверить, является ли аргумент hana::type, а i будет содержать size_c<0> (поскольку первый элемент в кортеже уже является hana::type):

auto i = hana::index_if(t, hana::is_a<hana::type_tag>);

Если вы хотите проверить равенство какому-то типу, используйте equal::to:

auto i = hana::index_if(t, hana::equal.to(hana::type_c<double>));

[Ссылка на hana::equal ]

Живой пример

person Cássio Renan    schedule 18.09.2018