如何从boost :: hana :: tuple_t检索类型?

时间:2018-12-14 13:34:12

标签: c++ boost-hana

我已经使用hana:tuple_t来存储和检索类型列表:

auto Types = hana::tuple_t<int, double>;
auto first_t = Types[hana::int_c<0>];
static_assert(std::is_same_v<decltype(first_t)::type, int>); // line 3

上面的代码可以正常工作,但是当我尝试用其实际表达式替换变量first_t时:

static_assert(std::is_same_v<decltype(Types[hana::int_c<0>])::type, int>); //line 4

我收到一个编译错误:

template argument 1 is invalid
     static_assert(std::is_same_v<decltype(Types[hana::int_c<0>])::type, int>);
 error: decltype evaluates to ‘const boost::hana::type_impl<int>::_&’, which is not a class or enumeration type

上面代码的第3行和第4行是等效的,我怎么会得到第4行的编译错误:

1 个答案:

答案 0 :(得分:1)

decltype(Types[hana::int_c<0>])是对const的{​​{1}}引用,您不能查询引用来从引用中获取boost::hana::type_impl<int>::_ < em> d 类型。

::type仅用first_t声明,并且删除了引用和常量。如果您想保留它(在其他情况下),可以声明为auto

auto & first_t = ...

您可以使用static_assert(std::is_same_v<decltype(first_t), boost::hana::type_impl<int>::_>); 摆脱引用。

std::decay_t