私はenable_ifを使いこなしていましたが、私はいくつかの一貫性のない動作に遭遇したようです。これはVS2010にあります。私はそれを以下のサンプルに減らしました。std :: enable_if specialization failed
#include <type_traits>
using namespace std;
// enable_if in initial template definition
template <class T, class Enable = enable_if<true>> struct foo {};
foo<int> a; //OK
// explicit specialisation
template <class T, class Enable = void> struct bar;
template <class T> struct bar<T, void> {};
bar<int> b; //OK
// enable_if based specialisation
template <class T, class Enable = void> struct baz;
template <class T> struct baz<T, std::enable_if<true>> {};
baz<int> c; //error C2079: 'c' uses undefined struct 'baz<T>'
これはコードまたはコンパイラのバグですか?
もちろん、ああ。ありがとう! – Ayjay
@McNellis: "条件がfalseのときに代入が失敗するには、ネストされたtypedefを使用する必要があります。これは、条件がtrueの場合にのみ定義されます。" ...これは意味がありますか?それはあなたが失敗することは決してできないことを意味します。それはあなたが言っている意味ですか? –