SFINAE конструктор шаблонов с надстройкой :: 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 Hana?

0

Решение

Как говорит @Barry в комментариях, hana::when полезен для частичных специализаций и не может быть использован в вашем случае. Хана не дает заклинания, которое было бы более кратким, чем то, что у вас уже есть (что справедливо, если учесть, что это одна строка). Также обратите внимание, что вы можете отказаться от дополнительных typename ключевое слово от из std::enable_if_t,

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector