我有一个带有两个整数参数的类模板S1:
template <int A, int B> struct S1 { };我有另一个带有一个整数参数的类模板S2。在S2中有一个类型模板My_S1,专门研究S1。当S1通过S2在main中的专门化被实例化时,它工作得很好。
template<int A> struct S2 {
template<int B>
using My_S1 = S1<A, B>;
};
int main(int argc, char *argv[]) {
using S1_a = S2<0>::My_S1<0>;
}但是,如果我试图按下面的方式在第三类模板中这样做,则在编译时会出现错误。完整代码:
template<int A, int B>
struct S1 { } ;
template<int A>
struct S2 {
template<int B>
using My_S1 = S1<A, B>;
};
template<int A, int B>
struct S3 {
using My_S1 = typename S2<A>::My_S1<B>; // I get an error on this line
};
int main(int argc, char * argv[]) {
using S1_a = S1<0, 0>; // works fine, of course
using S1_b = S2<0>::My_S1<0>; // works fine
using S1_c = S3<2,1>::My_S1; // ?
return 0;
}我得到的错误如下:
error: expected ‘;’ before ‘<’ token
using My_S1 = typename S2<A>::My_S1<B>;
^
error: expected unqualified-id before ‘<’ token发布于 2015-03-29 20:38:09
您必须显式地告诉编译器S2<A>::My_S1是一个模板:
// vvvvvvvv-- here
using My_S1 = typename S2<A>::template My_S1<B>;https://stackoverflow.com/questions/29334526
复制相似问题