C++构造函数中的类型特征导致错误

gex*_*ide 3 c++ sfinae type-traits enable-if

可能重复:
我必须在何处以及为何要使用"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){}
};
Run Code Online (Sandbox Code Playgroud)

但是,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
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

Pau*_*lik 5

你必须添加typenamestd::enable_if<...>::type解决这一...