C++模板参数的嵌套模板使用时出现语法错误求助
C++模板语法错误:missing ';' before '<' 解决方法
问题代码
template<typename T, int I> class A { public: using CA = T::C<I>; }; class B { public: template<int I> struct C {}; }; int main() { A<B, 1> a; return 0; };
编译时会在using CA =行提示**"missing ';' before '<'"**错误。
问题原因
编译器无法确定T::C是一个模板类型。在依赖于模板参数T的上下文中,引用嵌套模板时必须使用template关键字明确告知编译器C是模板,否则编译器会把<解析为小于号,触发语法错误。
修正后的代码
template<typename T, int I> class A { public: using CA = T::template C<I>; // 添加template关键字消除歧义 }; class B { public: template<int I> struct C {}; }; int main() { A<B, 1> a; return 0; };
补充说明
template关键字在这里的作用是消除语法歧义,明确告诉编译器T::C是一个模板,后续的<>是模板实参列表而非比较运算符。这是C++模板依赖名称查找的强制规则:当访问依赖于模板参数的嵌套模板时,必须显式使用template关键字。
内容的提问来源于stack exchange,提问作者lequinne
相关产品推荐
相关产品推荐

