混淆CLANG的编译错误

时间:2015-12-17 05:47:48

标签: string c++11 gcc clang++ allocator

我正在尝试为char编写一个自定义分配器,以便与std::basic_string一起使用。我编写了以下代码,但无法使用 gcc.godbolt.org 上的 x86 clang 3.7 进行编译 - 请参阅the code。另一方面,GCC成功编译它。

像往常一样,有很多错误消息,其中一个是:

error: 'rebind' following the 'template' keyword does not refer to a template

到目前为止我的工作:

#include <algorithm>
#include <string>
#include <iostream>
#include <type_traits>
#include <cstring>


template <typename Tp>
struct my_allocator {
};

template <>
struct my_allocator<char> {
    char arr[30];
  typedef char value_type;
  my_allocator()
  {
      std::cout<<"ctor\n";
  }
  template <class T> 
  my_allocator(const my_allocator<T>& other)
  {
      std::cout<<"copy_ctor\n";
      std::memcpy(arr,other.arr,30);
  }
  char* allocate(std::size_t )
  {
      std::cout<<"allocated\n";
      return arr;
  }
  void deallocate(char* , std::size_t )
  {
      std::cout<<"freed\n";
  }
};

typedef std::basic_string<char,std::char_traits<char>, my_allocator<char> > my_string;

int main()
{
    my_string a("hello");
    std::cout<<a;
}

0 个答案:

没有答案