2016-09-28 3 views
0

次のコードが与えられた場合、Boost hanaを使用して同じ機能を表現する適切な方法は何ですか? whenためSFINAE 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; 
} 

ドキュメントenable_ifの代替としてそれを言及が、私は、この文脈でそれを適用するかどうかはわかりません。だから、Boost hanaを使ってテンプレートコンストラクタを選択的に有効にする方法はありますか?

+0

'hana :: when'は部分的な特殊化を有効にすることについてです。 – Barry

+0

@Barry:そうです、私が探しているのは、簡単なenable_ifをいくつかの簡単なハナの呪文に置き換える(おそらく)賢い方法です。 – Engineerist

答えて

1

@Barryがコメントで述べたように、hana::whenは部分的な特殊化に役立ち、あなたのケースでは使用できません。ハナはあなたがすでに持っているものよりも簡潔な呪文を提供していません(それは1つのライナーであると公平です)。また、typenameキーワードをstd::enable_if_tから削除することもできます。

関連する問題