另一个别名的模板别名

时间:2015-07-14 14:09:48

标签: c++ templates c++11

我在使用'时遇到了一些问题。 c ++中的关键字11。 这段代码应该为指向另一种类型的指针创建别名。

template <typename T>
class SomeClass
{
    typedef typename std::add_pointer<T>::type pointer;

    template <typename U>
    using rebind_pointer = typename std::pointer_traits<pointer>::rebind<U>;
}

SomeClass<int> obj;

但是在gcc 4.7中我遇到了编译错误:

  

typename std::pointer_traits<int*>::rebind名称template<class _Up> using rebind = _Up*,不是类型

我发现pointer_traits :: rebind本身就是一个模板别名,所以这可能是个问题吗?

1 个答案:

答案 0 :(得分:9)

您需要告诉编译器将rebind解析为模板:

template <typename U>
using rebind_pointer = typename std::pointer_traits<pointer>::template rebind<U>;
//                                                            ^^^^^^^^

这是必要的,因为std::pointer_traits<pointer>依赖于模板参数(T)。

有关何时以及为何需要使用template关键字的详细信息,请参阅this question