3

重複の可能性:
「template」および「typename」キーワードをどこに、なぜ配置する必要があるのですか?

単一の引数を取り、その引数の型::tに他の型のサブタイプでなければならないメンバー型がある場合にのみ有効になるコンストラクターが必要です。私はこれに型特性を使用しており、コードは次のようになります。

#include <type_traits>

struct Y{};

struct X{
    //Only allow if T has a type member T::t which is a subtype of Y
    template <typename T>
    X(T* t, std::enable_if<std::is_base_of<Y, typename T::t>::value, int>::type e = 0){}
};

ただし、g++は次のように文句を言います。

test/test.cpp:8:75: error: ‘std::enable_if<std::is_base_of<Y, typename T::t>::value, int>::type’ is not a type

私は何を間違えましたか?

4

1 に答える 1

5

これを解決するには、を追加する必要がありtypenameますstd::enable_if<...>::type...

于 2012-09-11T12:56:50.000 に答える