Custom Allocator: function does not take 2 arguments?



  • Mein allocator ('bridge_allocator') funktioniert mit LLVM/GCC, Visual C++ 2013 zickt aber irgendwie rum und ich kann mit der Fehlermeldung nichts anfangen. Konkret geht es um die construct-Methode:

    error C2660: 'std::_Wrap_alloc<bridge_allocator<int>>::construct' : function does not take 2 arguments	C:\...\VC\include\vector	873
    

    Ich habe alle möglichen Überladungen reinkopiert und trotzdem sagt er mir das.

    .
    .
    .
    template<typename U, typename... Args>
    void construct(U *, Args &&...);
    template<typename U, typename V>
    void construct(U, V); // zum testen
    

    Es kompiliert nicht wenn ich bei einem vector push_back benutzen will, und der Code dort sieht so aus:

    void push_back(value_type&& _Val)
    		{	// insert by moving into element at end
    		if (_Inside(_STD addressof(_Val)))
    			{	// push back an element
    			size_type _Idx = _STD addressof(_Val) - this->_Myfirst;
    			if (this->_Mylast == this->_Myend)
    				_Reserve(1);
    			_Orphan_range(this->_Mylast, this->_Mylast);
    			this->_Getal().construct(this->_Mylast,
    				_STD forward<value_type>(this->_Myfirst[_Idx]));
    			++this->_Mylast;
    			}
    		else
    			{	// push back a non-element
    			if (this->_Mylast == this->_Myend)
    				_Reserve(1);
    			_Orphan_range(this->_Mylast, this->_Mylast);
    			this->_Getal().construct(this->_Mylast,
    				_STD forward<value_type>(_Val));
    			++this->_Mylast;
    			}
    		}
    

    Die Zeilen 9 und 18 rufen this->_Getal() auf; allerdings kommt dort nicht mein bridge_allocator raus, sondern ein _wrap_alloc<bridge_allocator<...>>. Ich denke, es müsste ja trotzdem gehen? Was habe ich vergessen?



  • Könnte ein bug sein, frag mal http://nuwen.net/stl.html (ganz runter scrollen da stehen seine E-Mail Adressen). 😉 Du willst ihm allerdings vermutlich ein kompilierbares Minimalbeispiel geben. (Das würde auch uns helfen.)



  • Sehr spannend der Typ. Werde ihn vielleicht mal anschreiben, aber dafür brauche ich wie gesagt ein Beispiel. Werde mal versuchen, das alles isoliert aufzubereiten. Komisch trotzdem, dass mein Allocator nicht direkt genutzt wird.

    Danke für den Link 👍

    $Edit: Ich habe einige Sachen umgestellt und jetzt gibts nur noch fatal error C1001: An internal error has occurred in the compiler (compiler file 'msc1.cpp', line 1325). Beim LLVM läuft eine ganze Batterie an Tests problemlos durch. Vielleicht sollte ich die neuste Preview installieren 😃


Log in to reply