STL Implementierung von bcc32c



  • Was benutzt der C++ Builder mit clang für eine STL Implementierung
    (von wem, wer hat sie geschrieben)?

    EDIT:
    Weil sowas wie:

    _VARIADIC_EXPAND_0X(_ALLOC_TRAITS_SPECIAL_CONSTRUCT, , , , )
    

    lässt mich glauben, dass es ein alte Version der STL von M$ ist.



  • Ich bin nämlich der Ansicht, dass da irgendwas verbuggt ist.

    Der auskommentierte Teil löst zur laufzeit eine doppelten Aufruf von delete in std::string im std::pair destruktor aus.

    std::string unitToString(Unit unit)
    {
    	/*
    	static const std::map <uint32_t, std::string> map =
    	{
    		{static_cast <uint32_t> (Unit::em), "em"},
    		{static_cast <uint32_t> (Unit::ex), "ex"},
    		{static_cast <uint32_t> (Unit::percent), "%"},
    		{static_cast <uint32_t> (Unit::px), "px"},
    		{static_cast <uint32_t> (Unit::cm), "cm"},
    		{static_cast <uint32_t> (Unit::mm), "mm"},
    		{static_cast <uint32_t> (Unit::in), "in"},
    		{static_cast <uint32_t> (Unit::pt), "pt"},
    		{static_cast <uint32_t> (Unit::pc), "pc"},
    		{static_cast <uint32_t> (Unit::ch), "ch"},
    		{static_cast <uint32_t> (Unit::rem), "rem"},
    		{static_cast <uint32_t> (Unit::vh), "vh"},
    		{static_cast <uint32_t> (Unit::vw), "vw"},
    		{static_cast <uint32_t> (Unit::vmin), "vmin"},
    		{static_cast <uint32_t> (Unit::vmax), "vmax"}
    	};
    
    	auto i = map.find(static_cast <uint32_t> (unit));
    	if (i != std::end(map))
    	return i->second;
    	throw std::invalid_argument("this is not a valid unit");
    
    	//return std::string{map.at(static_cast <uint32_t> (unit))};
    	*/
    
    	// Quick Workaround
    	switch (unit)
    	{
    		case(Unit::em): return "em";
    		case(Unit::ex): return "ex";
    		case(Unit::percent): return "%";
    		case(Unit::px): return "px";
    		case(Unit::cm): return "cm";
    		case(Unit::mm): return "mm";
    		case(Unit::in): return "in";
    		case(Unit::pt): return "pt";
    		case(Unit::pc): return "pc";
    		case(Unit::ch): return "ch";
    		case(Unit::rem): return "rem";
    		case(Unit::vh): return "vh";
    		case(Unit::vw): return "vw";
    		case(Unit::vmin): return "vmin";
    		case(Unit::vmax): return "vmax";
    		default:
    			throw std::invalid_argument("this is not a valid unit");
    	}
    }
    


  • Welche Version des Studios benutzt du denn?
    Die Original Seattle Version hat einen Bug im Codegenerator, sowas Ähnliches hatte ich bei std::string .
    Was steht denn im Makro __clang_version__ ? 3.3.1 (35597.f2df582.87178a9) hat definitv eine Macke und produziert UB bei korrektem Quelltext.



  • 5cript schrieb:

    Was benutzt der C++ Builder mit clang für eine STL Implementierung
    (von wem, wer hat sie geschrieben)?

    Steht in den STL-Headern keine Copyright-Notiz?

    Frühe Versionen von C++Builder verwendeten die Rogue Wave-STL, in C++Builder 6 wurde STLport eingesetzt, ab 2006(?) eine Variante von Dinkumware. Letztere benutzt auch Microsoft; ich würde schätzen, daß Dinkumware auch noch in aktuellen C++Builder-Versionen eingesetzt wird.



  • Die STL-Include Dateien liegen alle im Unterverzeichnis dinkumware bzw. dinkumware64. Wird also wohl Dinkumware sein. Über die Version konnte ich nichts herausfinden, in den Headern steht nix.



  • (Arbeitsplatz)
    Berlin 10.1 - vor Update 1, dazu hatte ich ncoh keine Lust das zu installieren.

    Mehr kann ich gerade nicht nachschaun, weil @home 😕



  • Relevant ist es eigentlich nicht mehr, aber:

    3.3.1 (35759.1709ea1.58602a0)


Anmelden zum Antworten