eup*_*upp 6 c++ templates c++11
我在c ++ 11中使用'using'关键字时遇到了一些问题.这段代码应该为指向另一种类型的指针创建别名.
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;
Run Code Online (Sandbox Code Playgroud)
但是在gcc 4.7中我遇到了编译错误:
typename std::pointer_traits<int*>::rebind名称template<class _Up> using rebind = _Up*,不是类型
我发现pointer_traits :: rebind本身就是一个模板别名,所以这可能是问题吗?
您需要告诉编译器解析rebind为模板:
template <typename U>
using rebind_pointer = typename std::pointer_traits<pointer>::template rebind<U>;
// ^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
这是必要的,因为std::pointer_traits<pointer>它取决于模板参数(T).
有关何时以及为何需要使用该关键字的详细信息,请参阅此问题template.