У меня есть следующий код
template <typename T>
void my_func(T& /*var*/)
{
};
auto my_types = hana::make_map(
hana::make_pair(hana::type_c<std::uint32_t>, hana::integral_c<std::uint8_t, 1>),
hana::make_pair(hana::type_c<std::uint16_t>, hana::integral_c<std::uint8_t, 1>)
);
using my_variant = std::variant<std::uint32_t, std::uint16_t>;
auto to_factory = [](auto map)
{
return hana::transform(map, [](auto pair)
{
return [](my_variant& value)
{
using T = typename decltype(hana::first(pair))::type;
T v;
my_func(v);
value = v;
};
});
};
auto factory = to_factory(my_types);
но я всегда получаю сообщение об ошибке
error: 'boost::hana::type_impl<short unsigned int>::_&' is not a class, struct, or union type
когда я использую hana::pair
в my_tuple
. Все работает нормально, когда я просто использую
auto my_types = hana::make_map(
hana::type_c<std::uint32_t>,
hana::type_c<std::uint16_t>
);
и, очевидно, никакого звонка на hana::first
Почему я получаю ссылку при использовании hana::first
?
boost::hana::first
< /a>: Обратите внимание, что еслиProduct
действительно хранит содержащиеся в нем элементы,hana::first
требуется для возврата ссылки lvalue, ссылки lvalue на const или ссылки rvalue на элементfirst
, где тип ссылки должен соответствовать этому из пары переданоfirst
- person dfrib   schedule 20.05.2020using T = typename decltype(+hana::first(pair))::type;
не дало того, что вы ожидаете? - person dfrib   schedule 20.05.2020hana::map
, он должен бытьhana::tuple
- person Reza   schedule 20.05.2020