在一个简化的例子中,我在一个元组中有两种类型,我想创建另一个元组,它只包含表达式有效的类型(在这个例子中,我使用 + 运算符)。
我的尝试是这样的:
#include <boost/hana.hpp>
#include <boost/hana/experimental/printable.hpp>
#include <iostream>
namespace hana = boost::hana;
struct foo {};
const auto result{hana::filter(hana::tuple_t<int, foo>, [](auto type) {
const auto has_plus{hana::is_valid([](auto t)
-> decltype((void) hana::traits::declval(t) + hana::traits::declval(t)) {})};
return has_plus(type);
})};
int main()
{
std::cout << hana::experimental::print(result) << std::endl;
}
这输出'()',即。在我期望元组result
应该包含的地方没有匹配的类型type<int>
。
我正在使用与 Boost 1.62 一起打包的 Boost.Hana 版本。