如何将结构体的成员模板类型别名作为模板模板参数使用
正确语法
B<A::template type> b;
错误原因说明
- 所有错误写法中额外添加的
typename是核心问题:typename关键字的作用是告知编译器依赖作用域下的名称是具体类型,而你需要传递的是模板本身,不是类型,不需要加typename修饰。 - 不需要在
template后额外补充<typename>这类模板参数声明,A::template type已经可以明确表示这是结构体A内的模板别名,完全匹配B的模板模板参数要求。
完整可编译验证示例
#include <type_traits> struct A { template <typename T> using type = int; }; template <template <typename> class C> struct B { using test_type = C<double>; static_assert(std::is_same_v<test_type, int>); }; B<A::template type> b; // 编译通过
内容的提问来源于stack exchange,提问作者Y.D.
相关产品推荐
相关产品推荐

