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 beistd::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)