C++11 模板和别名声明

C++11 Template and alias declaration

我快疯了。 我正在尝试创建一个分配器,我在头文件中写了这个定义。

template<typename T>
class Allocator
{
    using size_type = size_t;
    using difference_type = ptrdiff_t;
    using pointer = T*;
    using const_pointer = const T*;
    using reference = T&;
    using const_reference = const T&;
    using value_type = T;

  //others stuff
  // Get address of a reference
  pointer address(reference x) const;
  ...
};

之后,我尝试在 .cpp 文件中编写定义,如:

template<typename T>
pointer Allocator<T>::address(reference x) const
{
    return &x;
}

但是错了。 我也试着写:

template<typename T>
Allocator<T>::pointer Allocator<T>::address(reference x) const
{
    return &x;
}

但同样是错误的。

使用模板别名的方法的正确定义是什么?

感谢您的帮助。

选项#1

template <typename T>
typename Allocator<T>::pointer Allocator<T>::address(reference x) const
//~~~~~^
{
    return &x;
}

选项#2

template <typename T>
auto Allocator<T>::address(reference x) const -> pointer
//~^                                          ~~~~~~~~~^
{
    return &x;
}