类WithTTMember有一个名为TT的模板成员类型。
struct WithTTMember {
template<typename> using TT = void;
};另一个类ExpectTT接受一个模板模板参数:
template< template<typename> typename TT >
struct ExpectTT {};可以成功地实例化ExpectTT<WithTTMember::TT>。
第三类ExpectTWithTT期望模板参数具有名为TT的模板成员类型,并使用它实例化ExpectTT:
template<typename T>
struct ExpectTWithTT {
using X = ExpectTT<typename T::TT>; // this doesn't compile
};我希望ExpectTWithTT<WithTTMember>::X与ExpectTT<WithTTMember::TT>的类型相同。但是,上面的代码无法编译。
我尝试用template和typename关键字结合使用错误的行来跟踪编译器消息和我的本能,但是我无法让它工作。
我怎么表达我想要的?
任何C++版本都可以。
发布于 2021-02-18 05:25:51
您应该使用template关键字来判断T::TT是一个模板。
template<typename T>
struct ExpectTWithTT {
using X = ExpectTT<T::template TT>;
// ^^^^^^^^
};https://stackoverflow.com/questions/66254082
复制相似问题