Library: fix follow-up problems with const correctness

...the improved const correctness on STL iterators uncovered another
latent problem with out diagnositc format helper, which provide
consistently rounded float and double output, but failed to take
CV-qualifiaction into account
This commit is contained in:
Fischlurch 2023-05-21 23:45:45 +02:00
parent e176e54004
commit 0df0fd001e
5 changed files with 163 additions and 46 deletions

View file

@ -168,12 +168,15 @@ namespace util {
* by boost::lexical_cast. For double or float values, hard wired
* rounding to a fixed number of digits will be performed, to yield
* a predictable display of printed unit-test results.
* @remark while the actual parameter is passed by const-ref,
* cv-qualifiactions and references are stripped from the type
*/
template<typename TY>
inline std::string
toString (TY const& val) noexcept
{
return StringConv<TY>::invoke (val);
using PlainVal = typename lib::meta::Strip<TY>::TypeReferred;
return StringConv<PlainVal>::invoke (val);
}

View file

@ -146,7 +146,7 @@ namespace meta {
struct Unwrap<X*>
: std::true_type
{
using Type = typename std::remove_cv<X>::type;
using Type = remove_cv_t<X>;
static Type&
extract (const X* ptr)
@ -246,10 +246,10 @@ namespace meta {
template<typename X>
struct Strip
{
using TypeUnconst = typename std::remove_cv<X> ::type;
using TypeReferred = typename std::remove_reference<TypeUnconst>::type;
using TypePointee = typename std::remove_pointer<TypeReferred> ::type;
using TypePlain = typename std::remove_cv<TypePointee> ::type;
using TypeUnconst = remove_cv_t<X>;
using TypeReferred = remove_reference_t<TypeUnconst>;
using TypePointee = remove_pointer_t<TypeReferred>;
using TypePlain = remove_cv_t<TypePointee>;
using Type = typename Unwrap<TypePlain>::Type;
};

View file

@ -347,8 +347,11 @@ namespace util {
* the danger of creating much header inclusion and code size bloat. A more
* elaborate, [extended solution](\ref lib::toString), including _lexical conversions
* for numbers,_ is defined in format-obj.hpp
* @tparam X the nominal type to base the string conversion on; should be
* a plain type (class or value) without CV-qualification and references
* @note any exceptions during string conversion are caught and silently ignored;
* the returned string indicates "↯" in this case.
* @see util::toString() a user friendly front-end
*/
template<typename X, typename COND =void>
struct StringConv

View file

@ -29,6 +29,7 @@
#include "lib/format-util.hpp"
#include "lib/format-string.hpp"
#include "lib/iter-adapter-stl.hpp"
#include "lib/test/test-helper.hpp"
#include "lib/error.hpp"
#include <vector>
@ -215,7 +216,7 @@ namespace test {
"6.6--+--"
"7.7--+--"
"8.8--+--"
"9.9");
"9.9"_expect);
CHECK (join (transformIterator(eachElm(dubious), justCount))
== "Nr.01(0.0), "
"Nr.02(2.2), "
@ -226,7 +227,7 @@ namespace test {
"Nr.07(13.2), "
"Nr.08(15.4), "
"Nr.09(17.6), "
"Nr.10(19.8)" );
"Nr.10(19.8)"_expect);
}

View file

@ -54407,8 +54407,7 @@
das ist der wichtigste Part: ich grenze mich hier explizit von der STL ab;&#160;&#160;ein &#187;Lumiera Forward Iterator&#171; ist nicht eine <i>besondere Art von Pointer</i>&#160;&#8212; wir wissen sonst wirklich nichts, und wir verzichten auf ein absolut optimale Performance. Und wir bieten <b>keinerlei</b>&#160; weitere Features, wie R&#252;ckw&#228;rts-Iteration, random-access, L&#246;schen und Einf&#252;gen. Einen einmal verbrauchten Iterator kann man nur noch wegwerfen.
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
</node>
</node>
@ -54431,8 +54430,7 @@
offensichtlich habe ich das gleiche Problem hier mehrfach gel&#246;st und das dann wieder vergessen
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="smiley-oh"/>
<node CREATED="1684280227062" ID="ID_1267159955" MODIFIED="1684280309727" TEXT="meta::TypeBinding&lt;IT&gt; (&quot;lib/meta/value-type-binding.hpp&quot;)"/>
<node CREATED="1684280251514" ID="ID_1628114025" MODIFIED="1684280266180" TEXT="meta::RefTraits&lt;TY&gt; (&quot;lib/meta.hpp&quot;)"/>
@ -70514,10 +70512,10 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684283054061" ID="ID_308870405" MODIFIED="1684283070409" TEXT="besseres Schema entwickeln">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684283167742" ID="ID_1215524261" MODIFIED="1684283172974" TEXT="Nutzung aufkl&#xe4;ren">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1684283054061" ID="ID_308870405" MODIFIED="1684705269237" TEXT="besseres Schema entwickeln">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#323686" CREATED="1684283167742" FOLDED="true" ID="ID_1215524261" MODIFIED="1684705263433" TEXT="Nutzung aufkl&#xe4;ren">
<icon BUILTIN="info"/>
<node CREATED="1684283181124" ID="ID_1050927524" MODIFIED="1684283195247" TEXT="(zum Gl&#xfc;ck) noch ein relativ abgeschlossenes &#xd6;kosystem">
<icon BUILTIN="idea"/>
</node>
@ -70534,8 +70532,7 @@
denn diese ist am aller fragw&#252;rdigsten
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<node CREATED="1684283608938" ID="ID_789340133" MODIFIED="1684283616371" TEXT="iter-adapter">
<node CREATED="1684283310011" ID="ID_990692893" MODIFIED="1684283370038" TEXT="IterAdapter"/>
<node CREATED="1684283378578" ID="ID_1166144503" MODIFIED="1684283379781" TEXT="RangeIter"/>
@ -70607,8 +70604,7 @@
...was wohl genau daran liegt, da&#223; das TypeBinding bisher konzeptionell &quot;daneben&quot; war
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
</node>
@ -70671,8 +70667,7 @@
hier ist ein Hinweis auf <b>TICKET #1125 : get rid of Val</b>
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1684285185549" ID="ID_524136739" MODIFIED="1684285230007" TEXT="gef&#xe4;hrlich">
@ -70694,17 +70689,57 @@
</node>
</node>
</node>
<node CREATED="1684285740036" ID="ID_265016247" MODIFIED="1684285746031" TEXT="Umbau-Plan">
</node>
<node COLOR="#338800" CREATED="1684283073854" ID="ID_1161646513" MODIFIED="1684705071997" TEXT="Nutzung vereinheitlichen">
<icon BUILTIN="button_ok"/>
<node CREATED="1684283085033" ID="ID_637878819" MODIFIED="1684283100218" TEXT="der meta::RefWrapper wird nur von den Itertools genutzt"/>
<node CREATED="1684283104526" ID="ID_1800561250" MODIFIED="1684283143956" TEXT="TypeBinding wird von vielen anderen Lumiera-Forward-Iteratoren genutzt"/>
<node CREATED="1684283144761" ID="ID_378332003" MODIFIED="1684705069855" STYLE="fork" TEXT="manche machen&apos;s immer noch direkt"/>
<node CREATED="1684705076909" ID="ID_318662270" MODIFIED="1684705228200" TEXT="bessere Struktur">
<icon BUILTIN="idea"/>
<node COLOR="#338800" CREATED="1684705081314" ID="ID_869903897" MODIFIED="1684705238444" TEXT="meta::RefTraits f&#xfc;r die generische Typ-Behandlung">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
analog zu meta::Strip, nur weniger aggressiv
</p>
<ul>
<li>
Referenzen werden nivelliert
</li>
<li>
Pointer bleiben ein separater Typ
</li>
</ul>
</body>
</html></richcontent>
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1684705201545" ID="ID_1849546034" MODIFIED="1684705238444" TEXT="ValueTypeBindings speziell f&#xfc;r Iteratoren und nested Typedefs">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1684705232117" ID="ID_1509834522" MODIFIED="1684705238445" TEXT="bauen nun aufeinander auf">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1684285740036" ID="ID_265016247" MODIFIED="1684705059043" TEXT="schrittweiser Umbau">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1684285746921" ID="ID_453018815" MODIFIED="1684453850245" TEXT="erst einmal alles in TypeBinding zusammenf&#xfc;hren">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1684285761285" ID="ID_399824938" MODIFIED="1684453848315" TEXT="dort zus&#xe4;tzliche Variante base_type einf&#xfc;hren">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1684285782158" ID="ID_1046713320" MODIFIED="1684627513659" TEXT="dann Semantik von value_type &#xe4;ndern">
<node COLOR="#338800" CREATED="1684285782158" FOLDED="true" ID="ID_1046713320" MODIFIED="1684705028570" TEXT="dann Semantik von value_type &#xe4;ndern">
<icon BUILTIN="button_ok"/>
<node CREATED="1684457336456" ID="ID_668731240" MODIFIED="1684457339328" TEXT="Probleme">
<node CREATED="1684457340219" ID="ID_349629435" MODIFIED="1684457345698" TEXT="const-correctness">
<node COLOR="#435e98" CREATED="1684457336456" FOLDED="true" ID="ID_668731240" MODIFIED="1684705007675" TEXT="Probleme">
<icon BUILTIN="messagebox_warning"/>
<node COLOR="#435e98" CREATED="1684457340219" ID="ID_349629435" MODIFIED="1684704996420" TEXT="const-correctness">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1684457356442" ID="ID_718673785" MODIFIED="1684457361150" TEXT="iter-curstor-test">
<node CREATED="1684457376306" ID="ID_1078884821" MODIFIED="1684457376306" TEXT="CIter = IterCursor&lt;Numz::const_iterator&gt;;"/>
<node CREATED="1684457442699" ID="ID_492340662" MODIFIED="1684457443679" TEXT="IterStateWrapper&lt;typename iter::CursorGear&lt;IT&gt;::value_type, iter::CursorGear&lt;IT&gt;&gt;"/>
@ -70724,7 +70759,8 @@
</node>
</node>
</node>
<node CREATED="1684457756467" ID="ID_1799112543" MODIFIED="1684457763201" TEXT="pointer strip">
<node COLOR="#435e98" CREATED="1684457756467" ID="ID_1799112543" MODIFIED="1684704996421" TEXT="pointer strip">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1684457764640" ID="ID_589412032" MODIFIED="1684457771969" TEXT="scoped-collection-test">
<node CREATED="1684457794295" ID="ID_1727116794" MODIFIED="1684457799167" TEXT="CollI = ScopedCollection&lt;uint&gt;"/>
<node CREATED="1684457816624" ID="ID_1452815222" MODIFIED="1684457817291" TEXT="CollI coll (20, CollI::pull(source.begin()));"/>
@ -70744,7 +70780,7 @@
</node>
</node>
<node COLOR="#435e98" CREATED="1684459906255" ID="ID_1378023279" MODIFIED="1684626459648" TEXT="placement-Index">
<icon BUILTIN="flag-pink"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1684459919427" ID="ID_1436515063" MODIFIED="1684626423578" TEXT="has_any (elementsInScope, equalsTheElement);">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1436515063" ENDARROW="Default" ENDINCLINATION="953;0;" ID="Arrow_ID_233825462" SOURCE="ID_845601504" STARTARROW="None" STARTINCLINATION="953;0;"/>
</node>
@ -70775,7 +70811,7 @@
</node>
</node>
<node COLOR="#435e98" CREATED="1684460327937" ID="ID_1243195068" MODIFIED="1684626167397" TEXT="JobTicket::buildProvisionSpec">
<icon BUILTIN="flag-pink"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1684460427537" ID="ID_1226575987" MODIFIED="1684460443243" TEXT="von: MockSegmentation::buildTicketFromSpec(GenNode)">
<icon BUILTIN="idea"/>
</node>
@ -70830,7 +70866,7 @@
<node CREATED="1684539670393" ID="ID_310218838" MODIFIED="1684539778471" TEXT="CON = std::shared_ptr&lt;lib::IterSource&lt;const char*&gt; &gt;"/>
<node CREATED="1684539670393" ID="ID_1854935145" MODIFIED="1684539789446" TEXT="IterAdapter&lt;POS, CON&gt;::reference = const char&amp;"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1684539583917" ID="ID_112700804" MODIFIED="1684539611127" TEXT="hier werden Typen aber ziemlich falsch zugeornet">
<node COLOR="#ff0000" CREATED="1684539583917" ID="ID_112700804" MODIFIED="1684539611127" TEXT="hier werden Typen aber ziemlich falsch zugeornet">
<icon BUILTIN="stop-sign"/>
<node CREATED="1684540675424" ID="ID_1620874341" MODIFIED="1684540690953">
<richcontent TYPE="NODE"><html>
@ -70858,12 +70894,12 @@
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684540984894" ID="ID_71878097" MODIFIED="1684541006615" TEXT="also mu&#xdf; das Desaster wohl direkt in ValueTypeBinding passieren">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1684540984894" ID="ID_71878097" MODIFIED="1684701338581" TEXT="also mu&#xdf; das Desaster wohl direkt in ValueTypeBinding passieren">
<icon BUILTIN="clanbomber"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1684541044909" ID="ID_829271566" MODIFIED="1684541051786" TEXT="was ist std::remove_pointer_t&lt;POS&gt;">
<node COLOR="#435e98" CREATED="1684541044909" ID="ID_829271566" MODIFIED="1684701330550" TEXT="was ist std::remove_pointer_t&lt;POS&gt;">
<icon BUILTIN="help"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1684541062585" ID="ID_690843749" MODIFIED="1684541091476" TEXT="und wie ergibt sich dann daraus reference = char const&amp;">
<node COLOR="#435e98" CREATED="1684541062585" ID="ID_690843749" MODIFIED="1684701330550" TEXT="und wie ergibt sich dann daraus reference = char const&amp;">
<icon BUILTIN="help"/>
</node>
</node>
@ -70888,7 +70924,7 @@
<node CREATED="1684545909915" ID="ID_493146886" MODIFIED="1684545972282" TEXT="damit geht es an join(CON, delim) mit CON = initializer_list&lt;string&gt; const&amp;"/>
</node>
<node CREATED="1684546028926" ID="ID_34906560" MODIFIED="1684546088662" TEXT="stringify(IT&amp;&amp;) with IT = RangeIter&lt;const string *&gt;">
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1684546334838" ID="ID_547357409" MODIFIED="1684546350340" TEXT="woher kommt hier der const string* ?">
<node COLOR="#435e98" CREATED="1684546334838" ID="ID_547357409" MODIFIED="1684701330549" TEXT="woher kommt hier der const string* ?">
<icon BUILTIN="help"/>
<node CREATED="1684626094980" ID="ID_829378008" MODIFIED="1684626104491" TEXT="von einem direkt programmierten Type-Binding"/>
<node COLOR="#338800" CREATED="1684626105086" ID="ID_1025913285" MODIFIED="1684626122919" TEXT="durch ValueTypeBinding&lt;IT&gt;::value_type ersetzt">
@ -70908,13 +70944,13 @@
<icon BUILTIN="yes"/>
<node CREATED="1684546491857" ID="ID_1736947794" MODIFIED="1684546499939" TEXT="RangeIter&lt;const string *&gt;"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1684546581725" ID="ID_1681461344" MODIFIED="1684546725943" TEXT="also ValueTypeBinding&lt;TY *&gt; pa&#xdf;t hier nicht">
<arrowlink COLOR="#e12e5f" DESTINATION="ID_164341663" ENDARROW="Default" ENDINCLINATION="64;-2;" ID="Arrow_ID_926464248" STARTARROW="None" STARTINCLINATION="-265;16;"/>
<arrowlink COLOR="#e12e5f" DESTINATION="ID_164341663" ENDARROW="Default" ENDINCLINATION="44;-16;" ID="Arrow_ID_926464248" STARTARROW="None" STARTINCLINATION="-265;16;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1684546673741" ID="ID_164341663" MODIFIED="1684626063307" TEXT="RangeIter&lt;TY *&gt; geht nicht korrekt mit Pointern um">
<linktarget COLOR="#e12e5f" DESTINATION="ID_164341663" ENDARROW="Default" ENDINCLINATION="64;-2;" ID="Arrow_ID_926464248" SOURCE="ID_1681461344" STARTARROW="None" STARTINCLINATION="-265;16;"/>
<linktarget COLOR="#e12e5f" DESTINATION="ID_164341663" ENDARROW="Default" ENDINCLINATION="44;-16;" ID="Arrow_ID_926464248" SOURCE="ID_1681461344" STARTARROW="None" STARTINCLINATION="-265;16;"/>
<icon BUILTIN="broken-line"/>
<node CREATED="1684546753135" HGAP="35" ID="ID_1396741432" MODIFIED="1684546926029" TEXT="operator*() : *p_ fordert const string &#x27fc; const string * &amp;" VSHIFT="22"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1684546891740" HGAP="40" ID="ID_915912294" MODIFIED="1684626059090" TEXT="Hinweis: der Kommentar impliziert &quot;Magic&quot;" VSHIFT="7">
@ -70961,7 +70997,7 @@
</node>
</node>
</node>
<node CREATED="1684621584827" ID="ID_1014436557" MODIFIED="1684621610333" TEXT="Zwischen-Befund / Reflexion">
<node COLOR="#435e98" CREATED="1684621584827" ID="ID_1014436557" MODIFIED="1684704975335" TEXT="Zwischen-Befund / Reflexion">
<icon BUILTIN="yes"/>
<node COLOR="#338800" CREATED="1684621612562" ID="ID_641071847" MODIFIED="1684621699986" TEXT="diverse Probleme mit der const-correctness aufgekl&#xe4;rt">
<icon BUILTIN="button_ok"/>
@ -70983,9 +71019,90 @@
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1684701350915" ID="ID_43056917" MODIFIED="1684704973575" TEXT="Folge-Problem mit FormatUtils_test">
<icon BUILTIN="button_ok"/>
<node CREATED="1684701367882" ID="ID_561133382" MODIFIED="1684701388742" TEXT="bessere const-correctness hat Folgen...">
<icon BUILTIN="smiley-oh"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1684460928713" ID="ID_781322960" MODIFIED="1684543483308" TEXT="Analyse">
<icon BUILTIN="pencil"/>
<node CREATED="1684701390886" ID="ID_1127329674" MODIFIED="1684701503856" TEXT="StringConv&lt;double&gt; ist speziell definiert">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
der Double wird n&#228;mlich (wohlweislich) f&#252;r diese Diagnostic-Anzeige auf 8 Stellen gerundet ... genau wegen Probemen wie hier
</p>
</body>
</html></richcontent>
<node CREATED="1684701416058" ID="ID_154721343" MODIFIED="1684701430372" TEXT="aber StringConv&lt;const double&gt; nicht"/>
<node CREATED="1684701438209" ID="ID_195122706" MODIFIED="1684701450439" TEXT="...und f&#xe4;llt daher in den generischen lexical-cast-Zweig"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1684701451533" ID="ID_223521412" MODIFIED="1684701462222" TEXT="wodurch der Test scheitert">
<icon BUILTIN="broken-line"/>
<node CREATED="1684701511699" ID="ID_1180510868" MODIFIED="1684701562681" TEXT="in den Testdaten ist n&#xe4;mlich &#xbb;Zahlenstaub&#xab;">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
1 * 1.1 = 1.100000000000000000000000000001
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1684701577650" ID="ID_508691413" MODIFIED="1684701594347" TEXT="und genau deshalb haben wir ja diese spezielle Formatfunktion!">
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1684702676714" ID="ID_902426926" MODIFIED="1684704944797" TEXT="welches Problem ist hier zu l&#xf6;sen?">
<icon BUILTIN="help"/>
<node CREATED="1684702728539" ID="ID_672513912" MODIFIED="1684702799208" TEXT="util::StringConv&lt;val&gt; ist inkonsistent bzw. CV">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
konkret: double verh&#228;lt sich anders als const double oder volatile double
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1684703187279" ID="ID_258062015" MODIFIED="1684703232937" TEXT="andererseits ist StringConv ein Implementierungs-Delegate"/>
<node CREATED="1684703233757" ID="ID_138153655" MODIFIED="1684704163826" TEXT="und sollte eigentlich von util::toString aufgerufen werden">
<arrowlink COLOR="#233986" DESTINATION="ID_812758633" ENDARROW="Default" ENDINCLINATION="24;-33;" ID="Arrow_ID_1690463920" STARTARROW="None" STARTINCLINATION="-82;4;"/>
</node>
<node CREATED="1684704008121" ID="ID_947184317" MODIFIED="1684704119578" TEXT="header-Includes (Gewicht) bedenken...!">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<ul>
<li>
lib/meta/util.hpp wird pervasiv verwendet und darf daher nahezu keine weiteren Includes vorraussetzen
</li>
<li>
demgegen&#252;ber wiegt lib/meta/trait.hpp schon mehr
</li>
<li>
und die Format-Funktionen k&#246;nnen auch Itertools etc. mit includieren (denn sie werden i.d.r. aus der Implementierung heraus verwendet)
</li>
</ul>
</body>
</html></richcontent>
</node>
</node>
<node COLOR="#338800" CREATED="1684703889449" ID="ID_812758633" MODIFIED="1684704939920" TEXT="&#x27f9; util::toString (format-util.hpp) sollte CV strippen">
<linktarget COLOR="#233986" DESTINATION="ID_812758633" ENDARROW="Default" ENDINCLINATION="24;-33;" ID="Arrow_ID_1690463920" SOURCE="ID_138153655" STARTARROW="None" STARTINCLINATION="-82;4;"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1684460928713" ID="ID_781322960" MODIFIED="1684705027179" TEXT="Analyse">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1684543492882" ID="ID_1765561986" MODIFIED="1684627380924" TEXT="zun&#xe4;chst value-type-binding-test durchpr&#xfc;fen">
<icon BUILTIN="button_ok"/>
<node CREATED="1684543612090" ID="ID_847618892" MODIFIED="1684543794926" TEXT="Problem-1">
@ -71036,13 +71153,6 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684283073854" ID="ID_1161646513" MODIFIED="1684283082079" TEXT="Nutzung vereinheitlichen">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1684283085033" ID="ID_637878819" MODIFIED="1684283100218" TEXT="der meta::RefWrapper wird nur von den Itertools genutzt"/>
<node CREATED="1684283104526" ID="ID_1800561250" MODIFIED="1684283143956" TEXT="TypeBinding wird von vielen anderen Lumiera-Forward-Iteratoren genutzt"/>
<node CREATED="1684283144761" ID="ID_378332003" MODIFIED="1684283152252" TEXT="manche machen&apos;s immer noch direkt"/>
</node>
</node>
</node>
</node>
</node>