Can someone point me to an example of a custom std::basic_string allocator that compiles under VS 2005 or VS 2008?
I can't get this code to compile. All errors refer to a file called xstring. The following code might have worked
under MSVC++ 6.0, but apparently something has changed in basic_string since then.
Code:#include <string> template<class T> struct MyAllocator { typedef T* pointer; typedef const T* const_pointer; typedef T& reference; typedef const T& const_reference; typedef T value_type; typedef size_t size_type; typedef ptrdiff_t difference_type; pointer address(reference x) const { return (&x); } const_pointer address(const_reference x) const { return (&x); } pointer allocate(size_type n, const_pointer = 0) { return (pointer)::operator new(n * sizeof(T)); } void deallocate(pointer p, size_type n) { ::operator delete(p); } }; typedef std::basic_string<char, std::char_traits<char>, MyAllocator<char> > MyString; int main(int argc, char *argv[], char *env[]) { MyString str; return 0; }
Code:C:\Program Files\Microsoft Visual Studio 8\VC\include\xstring(467) : error C2903: 'rebind' : symbol is neither a class template nor a function template C:\Program Files\Microsoft Visual Studio 8\VC\include\xstring(496) : see reference to class template instantiation 'std::_String_val<_Ty,_Alloc>' being compiled with [ _Ty=char, _Alloc=MyAllocator<char> ] ..\main.cpp(37) : see reference to class template instantiation 'std::basic_string<_Elem,_Traits,_Ax>' being compiled with [ _Elem=char, _Traits=std::char_traits<char>, _Ax=MyAllocator<char> ] C:\Program Files\Microsoft Visual Studio 8\VC\include\xstring(467) : error C2039: 'rebind' : is not a member of 'MyAllocator<T>' with [ T=char ] etc...


Reply With Quote

Bookmarks