带有boost :: hana的SFINAE模板构造函数

时间:2016-09-28 15:21:07

标签: c++ boost boost-hana

鉴于以下代码,使用Boost hana表达相同功能的适当方式是什么?

#include <type_traits>

#include <boost/hana/type.hpp>
#include <boost/hana/core/when.hpp>
namespace hana = boost::hana;

struct S {
    template<
        typename T,
        typename = typename std::enable_if_t< (T::value) > > // <-- equivalent?
    S (const T&) { }
};

struct X { static constexpr int value = 0; };
struct Y { static constexpr int value = 1; };

int main () {
    S a (X { }); // <-- must fail
    S b (Y { });
    return 0;
}

when的文档提及它作为enable_if的替代,但我不确定如何在此上下文中应用它。那么,如何使用Boost选择性地启用模板构造函数?

1 个答案:

答案 0 :(得分:1)

正如@Barry在评论中所说,hana::when对于部分专业化非常有用,并且无法在您的案例中使用。 Hana没有提供比你已经拥有的更简洁的咒语(这是公平的,因为它是一个单线)。另请注意,您可以从typename中删除额外的std::enable_if_t关键字。