Boost Fusion invoke and SFINAE
Boost Fusion invoke and SFINAE
我想根据具有特定 Fusion 序列的boost::fusion::invoke()
是否有效来实现部分类模板专用化。 但在这种情况下,替换失败似乎是一个错误。
我想我需要一个有效的is_callable_with_these_sequence_parameters<F, Seq>
元函数。 谁能帮忙?
struct F
{
template<class> struct result;
template<class F> struct result<F(float)> { typedef int type; };
int operator()(float) { std::cout << "invoked (float)n"; }
};
template <class Sequence, class Enable=void>
struct A
{
A() { std::cout << "invoked nothingn"; }
};
// Partial specialization
template <class Sequence>
struct A<Sequence, typename boost::fusion::result_of::invoke<F, Sequence>::type>
{
A() { boost::fusion::invoke(F(), Sequence()); }
};
static void test()
{
A<boost::fusion::vector<float> >(); // should print "invoked (float)"
A<boost::fusion::vector<char, char> >(); // should print "invoked nothing"
}
经过一些调查,我认为这是提升中的一个错误。
此处报告,到目前为止没有解决方法。
更新:根据票证,boost::fusion
的一些不正确行为已得到修复。
相关文章:
- 为什么使用SFINAE而不是函数重载
- 如何使用模板函数的函数签名进行SFINAE
- 数据成员SFINAE的C++17测试:gcc vs clang
- 使用在用于SFINAE的void_t中具有参数的方法
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- 提供与TMP和SFINAE的通用接口
- "Inverse SFINAE"避免模棱两可的过载
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- Gurobi GRBModel and GRBmodel in C++
- 如何在儿童类中使用SFINAE
- SFINAE: Understanding void_t and detect_if
- std::declval<T>(), SFINAE and deleted constructor
- Boost Fusion invoke and SFINAE