我在使用'时遇到了一些问题。 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本身就是一个模板别名,所以这可能是个问题吗?
答案 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。