Пытаюсь заюзать аллокаторы, в моей студии 2008 всё компилируется, в 2005 тоже вроде должно работать (раньше подобное писал), а теперь пытаюсь отослать решение на сайт (олимпиадный), и получаю Compilation Error. К сожалению, текст ошибки он не выдаёт Собственно просьба откомпилировать это дело на студии 7.1 и выложить сюда вывод компилятора. Код (Text): #define _CRT_SECURE_NO_DEPRECATE #include <algorithm> #include <memory> #include <iostream> #include <map> #include <vector> using namespace std; template <class T> class myalloc : public allocator<T> { static const size_t sz = 1000*1000; static bool was_init; static T * h; static vector<size_t> * q; public: template<class _Other> struct rebind { typedef myalloc<_Other> other; }; myalloc() { } myalloc (const allocator<T> & right) { } void init() { q = new vector<size_t>; for (size_t i=0; i<sz; ++i) q->push_back (sz-i-1); h = (T*) new char [sz * sizeof(T)]; } T * allocate (size_t) { if (!was_init) { was_init = true; init(); } size_t pos = q->back(); q->pop_back(); return h+pos; } void deallocate (T * ptr, size_t) { ptr->~T(); q->push_back (ptr - h); } }; template <class T> bool myalloc<T>::was_init = false; template <class T> T * myalloc<T>::h = NULL; template <class T> vector<size_t> * myalloc<T>::q; typedef map < int, int, less<int>, myalloc < pair<const int,int> > > map_ii; vector<map_ii> t; map_ii b; int main() { } Пробовал компилить в Comeau через их сайт, он тоже ругается, но я ошибку не понял: он не смог преобразовать allocator<tree_item<pair<int,int>>> в allocator<pair<int,int>>. Имхо это просто несовместимость с микрософтным компилером. Заранее благодарю. P.S. Если кто знает сайт, на котором можно откомпилировать код целой кучей компиляторов различных версий (вроде был такой сайт), просьба кинуть в меня ссылкой
maxdiver Код (Text): test.cpp C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(574) : warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\istream(828) : warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\istream(1064) : warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\map(25) : error C2248: 'myalloc<T>::rebind<_Other>::other' : cannot access inaccessible typedef declared in class 'myalloc<T>' with [ T=std::pair<const int,int>, _Other=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false>::value_type ] and [ T=std::pair<const int,int> ] test.cpp(23) : see declaration of 'myalloc<T>::rebind<_Other>::other' with [ T=std::pair<const int,int>, _Other=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false>::value_type ] C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xtree(23) : see reference to class template instantiation 'std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,_Mfl>' being compiled with [ _Kty=int, _Ty=int, _Pr=std::less<int>, _Alloc=myalloc<std::pair<const int,int>>, _Mfl=false ] C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xtree(65) : see reference to class template instantiation 'std::_Tree_nod<_Traits>' being compiled with [ _Traits=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false> ] C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xtree(87) : see reference to class template instantiation 'std::_Tree_ptr<_Traits>' being compiled with [ _Traits=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false> ] C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xtree(105) : see reference to class template instantiation 'std::_Tree_val<_Traits>' being compiled with [ _Traits=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false> ] C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\map(77) : see reference to class template instantiation 'std::_Tree<_Traits>' being compiled with [ _Traits=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false> ] test.cpp(68) : see reference to class template instantiation 'std::map<_Kty,_Ty,_Pr,_Alloc>' being compiled with [ _Kty=int, _Ty=int, _Pr=std::less<int>, _Alloc=myalloc<std::pair<const int,int>> ] C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\map(26) : error C2248: 'myalloc<T>::rebind<_Other>::other' : cannot access inaccessible typedef declared in class 'myalloc<T>' with [ T=std::pair<const int,int>, _Other=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false>::value_type ] and [ T=std::pair<const int,int> ] test.cpp(23) : see declaration of 'myalloc<T>::rebind<_Other>::other' with [ T=std::pair<const int,int>, _Other=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false>::value_type ] C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xtree(128) : error C2248: 'myalloc<T>::rebind<_Other>::other' : cannot access inaccessible typedef declared in class 'myalloc<T>' with [ T=std::pair<const int,int>, _Other=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false>::value_type ] and [ T=std::pair<const int,int> ] test.cpp(23) : see declaration of 'myalloc<T>::rebind<_Other>::other' with [ T=std::pair<const int,int>, _Other=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false>::value_type ] C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xtree(169) : error C2248: 'myalloc<T>::rebind<_Other>::other' : cannot access inaccessible typedef declared in class 'myalloc<T>' with [ T=std::pair<const int,int>, _Other=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false>::value_type ] and [ T=std::pair<const int,int> ] test.cpp(23) : see declaration of 'myalloc<T>::rebind<_Other>::other' with [ T=std::pair<const int,int>, _Other=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false>::value_type ] C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xtree(170) : error C2248: 'myalloc<T>::rebind<_Other>::other' : cannot access inaccessible typedef declared in class 'myalloc<T>' with [ T=std::pair<const int,int>, _Other=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false>::value_type ] and [ T=std::pair<const int,int> ] test.cpp(23) : see declaration of 'myalloc<T>::rebind<_Other>::other' with [ T=std::pair<const int,int>, _Other=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false>::value_type ] C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xtree(171) : error C2248: 'myalloc<T>::rebind<_Other>::other' : cannot access inaccessible typedef declared in class 'myalloc<T>' with [ T=std::pair<const int,int>, _Other=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false>::value_type ] and [ T=std::pair<const int,int> ] test.cpp(23) : see declaration of 'myalloc<T>::rebind<_Other>::other' with [ T=std::pair<const int,int>, _Other=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false>::value_type ] C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xtree(176) : error C2248: 'myalloc<T>::rebind<_Other>::other' : cannot access inaccessible typedef declared in class 'myalloc<T>' with [ T=std::pair<const int,int>, _Other=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false>::value_type ] and [ T=std::pair<const int,int> ] test.cpp(23) : see declaration of 'myalloc<T>::rebind<_Other>::other' with [ T=std::pair<const int,int>, _Other=std::_Tmap_traits<int,int,std::less<int>,myalloc<std::pair<const int,int>>,false>::value_type ] Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.6030 for 80x86 Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
Хехе. Неутешительные выводы. http://www.thescripts.com/forum/thread263033.html : попробую ещё пошаманить...
Убрал наследование от std::allocator, так стало компилироваться, правда, пришлось доопределить несколько функций и тупдефов. В общем, всем спасибо, вопрос закрыт