hana::second 无法推断类型
hana::second can't deduce type
我正在尝试使用 hana::second
...
从一对访问 hana::type
namespace hana = boost::hana;
using namespace hana::literals;
struct Key {};
struct Foo {};
int main() {
auto test = hana::make_tuple(
hana::make_pair(
hana::type_c<Key>,
hana::type_c<Foo>));
typename decltype(hana::type_c<Foo>)::type finalTest; //Ok
typename decltype(hana::second(test[0_c]))::type finalTest2; //Error
}
但我收到以下编译器错误:
stacktest.cpp: In function ‘int main()’:
stacktest.cpp:17:12: error: decltype evaluates to ‘boost::hana::type_impl<Foo>::_&’, which is not a class or enumeration type
typename decltype(hana::second(test[0_c]))::type finalTest2;
为什么 hana::second
的结果不是预期的 return 所包含的 hana::type
?
错误消息指出 decltype 正在评估 boost::hana::type_impl<Foo>::_&
,虽然看起来有点神秘,但您可以通过末尾的 &
看出它是 引用 到包含的 hana::type
。不幸的是,该引用将不包含您希望在原始类型中找到的成员。
为此 hana::type
提供了一个一元 operator+
,它只是取消对原始类型的引用,因此您可以执行以下操作:
typename decltype(+hana::second(test[0_c]))::type finalTest2;
hana::typeid_
适用于此,并且它幂等地将任何值包装在 hana::type
中,并去除 const 和引用限定符:
typename decltype(hana::typeid_(hana::second(test[0_c])))::type finalTest2;
值得注意的是,以下所有 Hana 函数 return 参考资料:
first
、second
、at
、at_key
以及关联的 operator[]
.
我正在尝试使用 hana::second
...
hana::type
namespace hana = boost::hana;
using namespace hana::literals;
struct Key {};
struct Foo {};
int main() {
auto test = hana::make_tuple(
hana::make_pair(
hana::type_c<Key>,
hana::type_c<Foo>));
typename decltype(hana::type_c<Foo>)::type finalTest; //Ok
typename decltype(hana::second(test[0_c]))::type finalTest2; //Error
}
但我收到以下编译器错误:
stacktest.cpp: In function ‘int main()’:
stacktest.cpp:17:12: error: decltype evaluates to ‘boost::hana::type_impl<Foo>::_&’, which is not a class or enumeration type
typename decltype(hana::second(test[0_c]))::type finalTest2;
为什么 hana::second
的结果不是预期的 return 所包含的 hana::type
?
错误消息指出 decltype 正在评估 boost::hana::type_impl<Foo>::_&
,虽然看起来有点神秘,但您可以通过末尾的 &
看出它是 引用 到包含的 hana::type
。不幸的是,该引用将不包含您希望在原始类型中找到的成员。
为此 hana::type
提供了一个一元 operator+
,它只是取消对原始类型的引用,因此您可以执行以下操作:
typename decltype(+hana::second(test[0_c]))::type finalTest2;
hana::typeid_
适用于此,并且它幂等地将任何值包装在 hana::type
中,并去除 const 和引用限定符:
typename decltype(hana::typeid_(hana::second(test[0_c])))::type finalTest2;
值得注意的是,以下所有 Hana 函数 return 参考资料:
first
、second
、at
、at_key
以及关联的 operator[]
.