模板成员类的模板别名

时间:2013-11-19 04:23:52

标签: c++ c++11

我有以下模板

template<class F>
struct A{
  template<int N>
  struct B{
    using type = int;
  };
};

我想制作模板别名,但是:

//doesn't compile.
template<class F, int N >
using alias_A = typename A<F>::B<N>::type;

GCC:
question.cpp:12:36: error: expected ';' before '::' token
 using alias_A = typename A<F>::B<N>::type;
                                    ^
question.cpp:12:36: error: 'type' in namespace '::' does not name a type

调试时我发现:

//does compile
struct C{};
using alias_B = typename A<C>::B<0>::type;

有人可以指出我做错了什么吗?我觉得我错过了一些明显的东西。

1 个答案:

答案 0 :(得分:4)

你需要告诉C ++内部类型B<N>是一个模板:

template<class F, int N >
using alias_A = typename A<F>::template B<N>::type;

在这种情况下,编译器将您编写的内容解析为operator<,而不是模板参数的左括号。

This帖子详细介绍了您何时以及为何需要这样做。