Buffer-Provider: investigate Problem with embedded type-constructor-arguments

This is a possible extension which frequently comes up again during the design of the Engine.
Basically, the `TypeHandler` in the metadata-descriptor used by the `BufferProvder` could capture
additional context-arguments, which are then later passed to an object instance embedded into the buffer.

Yesterday I attempted to use this feature for a simple demonstration in `NodeBasic_test`,
just to find out that passing additional constructor arguments to the capture fails with
a confusing compilation error message. This failure could be traced down to the function binder;
and what at first sight seemed to be a compiler error, turned out to be a quite logical limitation:
When we »close« some objects of the constructor, but delay the construction itself, we'll have to
store a copy in the constructor-λ. And this implies, that we'll have to change the types
used for instantiation of the compiler, so that the construction-function can be invoked
by passing references from the captured copy of the additional arguments.

When naively passing those forwarded arguments into the std::bind()-call,
the resulting functor will fail at instantiation, when the compiler attempts
to generate the function-call `operator()`

see: https://stackoverflow.com/q/30968573/444796
This commit is contained in:
Fischlurch 2024-12-16 23:01:57 +01:00
parent 39fee624a9
commit 03b17c78da
4 changed files with 301 additions and 146 deletions

View file

@ -1,23 +1,31 @@
/* try.cpp - to try out and experiment with new features.... /* try.cpp - to try out and experiment with new features....
* scons will create the binary bin/try * scons will create the binary bin/try
*/ */
// 12/24 - investigate problem when perfect-forwarding into a binder
// 12/24 - investigate overload resolution on a templated function similar to std::get // 12/24 - investigate overload resolution on a templated function similar to std::get
// 11/24 - how to define a bare object location comparison predicate // 11/24 - how to define a bare object location comparison predicate
// 11/23 - prototype for grouping from iterator // 11/23 - prototype for grouping from iterator
/** @file try.cpp /** @file try.cpp
* Find out about the conditions when an overload of a function template is picked. * Partially binding / closing arguments of a function with _perfect forwarding_ can be problematic.
* This is an investigation regarding the proper way to overload `std::get` * The problem was encountered in the steam::engine::TypeHandler::create() - function with additional
* especially when the base class of the custom type itself is a tuple. * constructor arguments. Obviously, we want these to be _perfect forwarded_ into the actual constructor,
* but the binding must store a captured copy of these values, because the handler can be used repeatedly.
* *
* As it turns out, overload resolution works as expected; rather the implementation * The actual problem is caused by the instantiation of the target function, because the arguments are
* of `std::get` causes the problems, as it triggers an assertion immediately when * also passed into the binding mechanism by _perfect forwarding._ The target function template will thus
* instantiated with out-of-bounds parameters, which prevents the overload resolution * be instantiated to expect RValues, but the binder can only pass a copy by-reference. At this point then
* to commence and directly terminates the compilation. The reason is that this * the problem materialises (with a rather confusing error message).
* standard implementation relies on std::tuple_element<I,T> to do the actual *
* bounds checking. This can be demonstrated by extracting the standard * The Problem was already discussed on [Stackoverflow]
* implementation and our custom implementation under a different name. *
* A simple workaround is to change the types in the instantiation into references;
* obviously this can not work for some argument types; if a more elaborate handling is necessary,
* the [handling of bound arguments] should be considered in detail.
*
* [Stackoverflow]: https://stackoverflow.com/q/30968573/444796
* [handling of bound arguments]: http://en.cppreference.com/w/cpp/utility/functional/bind#Member_function_operator.28.29
*/ */
typedef unsigned int uint; typedef unsigned int uint;
@ -26,94 +34,52 @@ typedef unsigned int uint;
#include "lib/format-cout.hpp" #include "lib/format-cout.hpp"
#include "lib/test/test-helper.hpp" #include "lib/test/test-helper.hpp"
#include "lib/test/diagnostic-output.hpp" #include "lib/test/diagnostic-output.hpp"
#include "lib/hetero-data.hpp"
#include "lib/util.hpp" #include "lib/util.hpp"
#include <utility> #include <functional>
#include <string>
#include <tuple>
using lib::test::showTypes; using std::cout;
using std::tuple; using std::endl;
using std::forward;
using std::placeholders::_1;
struct B { }; template<typename...ARGS>
inline void
dummy (int extra, ARGS&& ...args)
{
cout << extra <<"";
((cout << forward<ARGS>(args) << ""), ...)
<< endl;
}
struct D1 : B { }; template<typename...ARGS>
auto
bound (ARGS&& ...args)
{
return std::bind (dummy<ARGS&...>, _1, forward<ARGS>(args) ...);
}
struct D2 : D1 { }; void
fun (int&& a)
{
std::cout << a << std::endl;
}
string getty (B&) { return "getty-B&"; }
string getty (D1&&){ return "getty-D1&&"; }
string getty (D1&) { return "getty-D1&"; }
template<class...TS>
string getty (tuple<TS...>&) { return "getty-tuple& "+showTypes<TS...>(); }
template<class...TS>
struct F : tuple<TS...> { };
template<class...TS>
struct FD1 : F<TS...> {};
template<class...TS>
struct FD2 : FD1<TS...> {};
template<class...TS>
string getty (FD1<TS...>&) { return "getty-FD1& "+showTypes<TS...>(); }
template<class...TS>
string getty (lib::HeteroData<TS...>&) { return "getty-Hetero& "+showTypes<TS...>(); }
template<std::size_t __i, typename... _Elements>
// constexpr std::__tuple_element_t<__i, tuple<_Elements...>>&
decltype(auto)
gritty(tuple<_Elements...>& __t) noexcept
{ return std::__get_helper<__i>(__t); }
template<size_t I, typename...DATA>
constexpr std::tuple_element_t<I, lib::HeteroData<DATA...>>&
gritty (lib::HeteroData<DATA...> & heDa) noexcept
{
return heDa.template get<I>();
}
int int
main (int, char**) main (int, char**)
{ {
D2 d2; dummy (55,2,3,5,8);
SHOW_EXPR(getty(d2));
FD2<int, char**> fd2; auto bun = bound (2,3,5);
SHOW_EXPR(getty(fd2)); using Bun = decltype(fun);
SHOW_TYPE(Bun)
bun (55);
auto bi = std::bind (fun, 55);
// bi(); /////////// this invocation does not compile, because the Binder passes a copy to the RValue-Ref
using Het = lib::HeteroData<uint,double>; cout << "\n.gulp." <<endl;
Het h1;
SHOW_EXPR(getty(h1));
// SHOW_EXPR(std::get<1>(h1) = 5.5)
SHOW_EXPR(h1.get<1>() = 5.5)
using Constructor = Het::Chain<bool,string>;
auto h2 = Constructor::build (true, "Ψ");
h2.linkInto(h1);
using Het2 = Constructor::ChainType;
Het2& chain2 = Constructor::recast (h1);
SHOW_TYPE(Het2)
SHOW_EXPR(getty(chain2));
// SHOW_EXPR(std::get<1>(chain2))
// SHOW_EXPR(std::get<3>(chain2))
SHOW_EXPR(chain2.get<1>())
SHOW_EXPR(chain2.get<3>())
SHOW_EXPR(gritty<1>(chain2))
SHOW_EXPR(gritty<3>(chain2))
cout << "\n.gulp.\n";
return 0; return 0;
} }

View file

@ -133,14 +133,19 @@ namespace engine {
, identity{deriveCombinedTypeIdenity<CTOR,DTOR>()} , identity{deriveCombinedTypeIdenity<CTOR,DTOR>()}
{ } { }
/** builder function defining a TypeHandler /** builder function for a pre-configured TypeHandler to place a
* to place an object into the buffer, * new instance into the buffer, possibly with given ctor arguments.
* possibly with given ctor arguments. */ * @warning additional ctor arguments will be materialised
* and stored as copy in the TypeHandler, for repeated use.
* @remark need to change the instantiation type to LValue-ref
* as pointed out on [Stackoverflow]
* [Stackoverflow]: https://stackoverflow.com/q/30968573/444796
*/
template<class X, typename...ARGS> template<class X, typename...ARGS>
static TypeHandler static TypeHandler
create (ARGS&& ...args) create (ARGS&& ...args)
{ {
return TypeHandler ( bind (buildIntoBuffer<X,ARGS...>, _1, forward<ARGS> (args)...) return TypeHandler ( bind (buildIntoBuffer<X,ARGS&...>, _1, forward<ARGS> (args)...)
, destroyInBuffer<X>); , destroyInBuffer<X>);
} }

View file

@ -89,8 +89,7 @@ namespace test {
// CHECK (m1.param ); // CHECK (m1.param );
BufferProvider& provider = DiagnosticBufferProvider::build(); BufferProvider& provider = DiagnosticBufferProvider::build();
BuffHandle buff = provider.lockBufferFor<long>(); ////////////////////////////OOO can not pass ctor-args directly here BuffHandle buff = provider.lockBufferFor<long> (-55);
buff.accessAs<long>() = -55;
CHECK (buff.isValid()); CHECK (buff.isValid());
CHECK (buff.accessAs<long>() == -55); CHECK (buff.accessAs<long>() == -55);

View file

@ -24275,9 +24275,7 @@
</node> </node>
<node CREATED="1583525076319" ID="ID_815242494" MODIFIED="1583525638834" TEXT="geht so nicht -- Widgets nicht sicher addressierbar"> <node CREATED="1583525076319" ID="ID_815242494" MODIFIED="1583525638834" TEXT="geht so nicht -- Widgets nicht sicher addressierbar">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
es gibt keinen <i>einfachen und performanten</i>&#160;Mechanismus, &#252;ber den ich mir irgend ein Widget merken und sp&#228;ter noch sicher addressieren kann, selbst wenn eine Diff-Nachricht inzwischen die Anzeige umbaut und das bezeichnete Element inzwischen gel&#246;scht ist. Und zwar deshalb, weil wir hier von echten einfachen GTK-Widgets reden, und nicht von unseren &quot;Tangibles&quot;, die am UI-Bus h&#228;ngen. Selbst wenn wir noch gesicherte &#187;Mediatoren&#171; dazwischenschalten, also z.B. diese Nachrichten &#252;ber jeweils ein zust&#228;ndiges model::Tangible zustellen, dann haben wiederum diese das identische Problem: sie bekommen nicht garantiert mit, wenn eines der von ihnen verwalteten Widgets inzwischen nicht mehr existiert. Wir br&#228;uchten es gibt keinen <i>einfachen und performanten</i>&#160;Mechanismus, &#252;ber den ich mir irgend ein Widget merken und sp&#228;ter noch sicher addressieren kann, selbst wenn eine Diff-Nachricht inzwischen die Anzeige umbaut und das bezeichnete Element inzwischen gel&#246;scht ist. Und zwar deshalb, weil wir hier von echten einfachen GTK-Widgets reden, und nicht von unseren &quot;Tangibles&quot;, die am UI-Bus h&#228;ngen. Selbst wenn wir noch gesicherte &#187;Mediatoren&#171; dazwischenschalten, also z.B. diese Nachrichten &#252;ber jeweils ein zust&#228;ndiges model::Tangible zustellen, dann haben wiederum diese das identische Problem: sie bekommen nicht garantiert mit, wenn eines der von ihnen verwalteten Widgets inzwischen nicht mehr existiert. Wir br&#228;uchten
@ -24827,9 +24825,7 @@
<node CREATED="1611915545852" ID="ID_580313241" MODIFIED="1611915553582" TEXT="eine Zeit-Position"/> <node CREATED="1611915545852" ID="ID_580313241" MODIFIED="1611915553582" TEXT="eine Zeit-Position"/>
<node CREATED="1611915554690" ID="ID_200419284" MODIFIED="1611915668706" TEXT="expliziter vertikaler Shift"> <node CREATED="1611915554690" ID="ID_200419284" MODIFIED="1611915668706" TEXT="expliziter vertikaler Shift">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
noch nicht klar, welche Rolle der spielt; ich sehe ihn erst mal vor, weil er m&#246;glich ist. Denkbar w&#228;re, da&#223; er durch User-Interaktion entsteht, oder aber auch systematisch generiert wird, um bestimmte Arten von Clips optisch abzusetzen noch nicht klar, welche Rolle der spielt; ich sehe ihn erst mal vor, weil er m&#246;glich ist. Denkbar w&#228;re, da&#223; er durch User-Interaktion entsteht, oder aber auch systematisch generiert wird, um bestimmte Arten von Clips optisch abzusetzen
@ -25537,9 +25533,7 @@
<node CREATED="1540511879965" ID="ID_1507237353" MODIFIED="1540511884826" TEXT="Varianten denkbar"> <node CREATED="1540511879965" ID="ID_1507237353" MODIFIED="1540511884826" TEXT="Varianten denkbar">
<node CREATED="1540511887116" ID="ID_467242392" MODIFIED="1576282358073" TEXT="nicht-virtuelle Methode"> <node CREATED="1540511887116" ID="ID_467242392" MODIFIED="1576282358073" TEXT="nicht-virtuelle Methode">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
...aber die gesamte Verankerungs-Aktion l&#228;&#223;t sich rein auf Widget-Interface-Ebene machen. ...aber die gesamte Verankerungs-Aktion l&#228;&#223;t sich rein auf Widget-Interface-Ebene machen.
@ -26300,9 +26294,7 @@
</node> </node>
<node CREATED="1576756331616" ID="ID_1376732304" MODIFIED="1576756364407" TEXT="Nein! auch dann brauchen wir noch eine Kette"> <node CREATED="1576756331616" ID="ID_1376732304" MODIFIED="1576756364407" TEXT="Nein! auch dann brauchen wir noch eine Kette">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
weil der Trigger irgendwo unten passiert, und nicht auf dem top-Level ViewHook weil der Trigger irgendwo unten passiert, und nicht auf dem top-Level ViewHook
@ -27450,9 +27442,7 @@
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
<node COLOR="#435e98" CREATED="1677426176707" ID="ID_1699845140" MODIFIED="1677426300779" TEXT="bleibe bei &#xbb;Au&#xdf;enbogen&#xab; und &#xbb;Innenbogen&#xab;"> <node COLOR="#435e98" CREATED="1677426176707" ID="ID_1699845140" MODIFIED="1677426300779" TEXT="bleibe bei &#xbb;Au&#xdf;enbogen&#xab; und &#xbb;Innenbogen&#xab;">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
weil ich diese Benennungen von Anfang an auch so in FreeCAD verwendet habe, und jetzt nicht alles umbenennen m&#246;chte weil ich diese Benennungen von Anfang an auch so in FreeCAD verwendet habe, und jetzt nicht alles umbenennen m&#246;chte
@ -29034,9 +29024,7 @@
<node CREATED="1557446482447" FOLDED="true" ID="ID_835188518" MODIFIED="1561827469138" TEXT="L&#xf6;sung: Duck-Detector f&#xfc;r Methoden-Name"> <node CREATED="1557446482447" FOLDED="true" ID="ID_835188518" MODIFIED="1561827469138" TEXT="L&#xf6;sung: Duck-Detector f&#xfc;r Methoden-Name">
<node CREATED="1557446494679" ID="ID_1259664145" MODIFIED="1557498707229" TEXT="verzichtet auf Signatur-Check"> <node CREATED="1557446494679" ID="ID_1259664145" MODIFIED="1557498707229" TEXT="verzichtet auf Signatur-Check">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
d.h. wenn zuf&#228;llig das Interface auch eine Methode CloneInto() enth&#228;lt, aber mit einer unpassenden Signatur d.h. wenn zuf&#228;llig das Interface auch eine Methode CloneInto() enth&#228;lt, aber mit einer unpassenden Signatur
@ -29090,9 +29078,7 @@
</node> </node>
<node CREATED="1557446924907" ID="ID_1029661613" MODIFIED="1557498707229" TEXT="...was hier absolut naheliegend ist"> <node CREATED="1557446924907" ID="ID_1029661613" MODIFIED="1557498707229" TEXT="...was hier absolut naheliegend ist">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
n&#228;mlich immer dann, wenn man tats&#228;chlich den CopySupport oder CloneSupport als Basis des Interfaces verwendet... n&#228;mlich immer dann, wenn man tats&#228;chlich den CopySupport oder CloneSupport als Basis des Interfaces verwendet...
@ -33199,9 +33185,7 @@
</node> </node>
<node CREATED="1567685388541" ID="ID_1586460223" MODIFIED="1567747074910"> <node CREATED="1567685388541" ID="ID_1586460223" MODIFIED="1567747074910">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
macht ggfs <i>ganz nat&#252;rlich</i>&#160;einen box-shadow sichtbar macht ggfs <i>ganz nat&#252;rlich</i>&#160;einen box-shadow sichtbar
@ -33277,9 +33261,7 @@
</node> </node>
<node COLOR="#435e98" CREATED="1679072221005" ID="ID_744686625" MODIFIED="1679072247211"> <node COLOR="#435e98" CREATED="1679072221005" ID="ID_744686625" MODIFIED="1679072247211">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
<font face="Monospaced" size="2">ClipPresenter::determineRequiredVerticalExtension()</font> <font face="Monospaced" size="2">ClipPresenter::determineRequiredVerticalExtension()</font>
@ -35265,9 +35247,7 @@
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
<node CREATED="1663955710647" HGAP="23" ID="ID_1436931569" MODIFIED="1663955749454" VSHIFT="17"> <node CREATED="1663955710647" HGAP="23" ID="ID_1436931569" MODIFIED="1663955749454" VSHIFT="17">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
weil dies die einzige Info ist, weil dies die einzige Info ist,
@ -36594,9 +36574,7 @@
</node> </node>
<node CREATED="1533221649380" ID="ID_727991171" MODIFIED="1533221669408"> <node CREATED="1533221649380" ID="ID_727991171" MODIFIED="1533221669408">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
das ist ein <i>akzidentelles Problem</i> das ist ein <i>akzidentelles Problem</i>
@ -37335,9 +37313,7 @@
<node CREATED="1614546235626" ID="ID_1042308082" MODIFIED="1614546278044" TEXT="am Ende brauchen wir dann auch noch die Metrik vom Layout(Canvas), f&#xfc;r das Zeit-Delta"/> <node CREATED="1614546235626" ID="ID_1042308082" MODIFIED="1614546278044" TEXT="am Ende brauchen wir dann auch noch die Metrik vom Layout(Canvas), f&#xfc;r das Zeit-Delta"/>
<node CREATED="1615558270517" ID="ID_295152392" MODIFIED="1615558374895" TEXT="Widerspr&#xfc;chliche Ownership der UI-Position"> <node CREATED="1615558270517" ID="ID_295152392" MODIFIED="1615558374895" TEXT="Widerspr&#xfc;chliche Ownership der UI-Position">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
geh&#246;rt diese nun dem Layout-Manager, oder geh&#246;rt er der Geste? geh&#246;rt diese nun dem Layout-Manager, oder geh&#246;rt er der Geste?
@ -37628,9 +37604,7 @@
<node CREATED="1616771255343" ID="ID_620255063" MODIFIED="1616771287475" TEXT="deshalb kann das Subject die Einrichtung nicht fix machen"/> <node CREATED="1616771255343" ID="ID_620255063" MODIFIED="1616771287475" TEXT="deshalb kann das Subject die Einrichtung nicht fix machen"/>
<node CREATED="1616771294654" ID="ID_334680468" MODIFIED="1616771818181" TEXT="auch der Zeitpunkt ist nicht absolut festgelegt"> <node CREATED="1616771294654" ID="ID_334680468" MODIFIED="1616771818181" TEXT="auch der Zeitpunkt ist nicht absolut festgelegt">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<ul> <ul>
<li> <li>
@ -38431,9 +38405,7 @@
</node> </node>
<node CREATED="1619787626757" ID="ID_1522870458" MODIFIED="1619799442131" TEXT="und ist hier nicht gerechtfertigt"> <node CREATED="1619787626757" ID="ID_1522870458" MODIFIED="1619799442131" TEXT="und ist hier nicht gerechtfertigt">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
das Platzieren auf den Canvas ist <b>keine</b>&#160;high-Performance-Operation;<br />vielmehr ist es sogar <i>vernachl&#228;ssigbar im Vergleich </i>zum Aufwand der Zeichen-Operationen; und letztere werden eben genau aus Performance-Gr&#252;nden gebatcht und geb&#252;ndelt.... das Platzieren auf den Canvas ist <b>keine</b>&#160;high-Performance-Operation;<br />vielmehr ist es sogar <i>vernachl&#228;ssigbar im Vergleich </i>zum Aufwand der Zeichen-Operationen; und letztere werden eben genau aus Performance-Gr&#252;nden gebatcht und geb&#252;ndelt....
@ -82697,7 +82669,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</p> </p>
</body> </body>
</html></richcontent> </html></richcontent>
<arrowlink COLOR="#cd0172" DESTINATION="ID_668512282" ENDARROW="Default" ENDINCLINATION="-522;-42;" ID="Arrow_ID_1453353099" STARTARROW="None" STARTINCLINATION="651;43;"/> <arrowlink COLOR="#cd0172" DESTINATION="ID_668512282" ENDARROW="Default" ENDINCLINATION="-522;-42;" ID="Arrow_ID_1453353099" STARTARROW="None" STARTINCLINATION="645;44;"/>
<icon BUILTIN="forward"/> <icon BUILTIN="forward"/>
</node> </node>
<node CREATED="1728582010084" ID="ID_814015395" MODIFIED="1728582033557" TEXT="mu&#xdf; implizit selber eine geeignete FeedManifold enthalten"/> <node CREATED="1728582010084" ID="ID_814015395" MODIFIED="1728582033557" TEXT="mu&#xdf; implizit selber eine geeignete FeedManifold enthalten"/>
@ -88526,7 +88498,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
</node> </node>
<node CREATED="1734310333302" ID="ID_1944960168" MODIFIED="1734310341752" TEXT="jeweils eine Manifold erstellen"/> <node CREATED="1734310333302" ID="ID_1944960168" MODIFIED="1734310341752" TEXT="jeweils eine Manifold erstellen"/>
<node CREATED="1734310343475" ID="ID_594704625" MODIFIED="1734310357870" TEXT="mit einem Test-BuffHandle beschicken"> <node COLOR="#338800" CREATED="1734310343475" ID="ID_594704625" MODIFIED="1734389465766" TEXT="mit einem Test-BuffHandle beschicken">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1734310375328" ID="ID_126539331" MODIFIED="1734310384120" TEXT="Test-Setup funktioniert nicht"> <node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1734310375328" ID="ID_126539331" MODIFIED="1734310384120" TEXT="Test-Setup funktioniert nicht">
<icon BUILTIN="broken-line"/> <icon BUILTIN="broken-line"/>
<node CREATED="1734310554672" ID="ID_1304749247" MODIFIED="1734310563567" TEXT="der Shortcut BufferProvider::lockBufferFor(args...)"/> <node CREATED="1734310554672" ID="ID_1304749247" MODIFIED="1734310563567" TEXT="der Shortcut BufferProvider::lockBufferFor(args...)"/>
@ -88586,8 +88559,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<font face="Monospaced" size="2">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</font> <font face="Monospaced" size="2">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</font>
</p> </p>
</body> </body>
</html> </html></richcontent>
</richcontent>
</node> </node>
<node CREATED="1734310629446" ID="ID_509553711" MODIFIED="1734311171944" TEXT="Symtom: der Binder kann nicht in eine std::function gepackt werden"> <node CREATED="1734310629446" ID="ID_509553711" MODIFIED="1734311171944" TEXT="Symtom: der Binder kann nicht in eine std::function gepackt werden">
<icon BUILTIN="info"/> <icon BUILTIN="info"/>
@ -88602,8 +88574,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<font face="Monospaced" size="1">&#160;&#160;std::function&lt;void(void*)&gt;::function(</font><font face="Monospaced" size="1" color="#b90563">std::<b>_Bind</b>&lt;void (*(std::_Placeholder&lt;1&gt;, int))(void*, int&amp;&amp;)&gt;</font><font face="Monospaced" size="1">&amp;)</font> <font face="Monospaced" size="1">&#160;&#160;std::function&lt;void(void*)&gt;::function(</font><font face="Monospaced" size="1" color="#b90563">std::<b>_Bind</b>&lt;void (*(std::_Placeholder&lt;1&gt;, int))(void*, int&amp;&amp;)&gt;</font><font face="Monospaced" size="1">&amp;)</font>
</p> </p>
</body> </body>
</html> </html></richcontent>
</richcontent>
</node> </node>
<node CREATED="1734311048512" ID="ID_1681074174" MODIFIED="1734311077645" TEXT="weiter oben im Type-Stack sieht man bereits, da&#xdf; dies der Template-Parameter CTOR ist"/> <node CREATED="1734311048512" ID="ID_1681074174" MODIFIED="1734311077645" TEXT="weiter oben im Type-Stack sieht man bereits, da&#xdf; dies der Template-Parameter CTOR ist"/>
<node CREATED="1734311079017" ID="ID_1399777845" MODIFIED="1734311159072"> <node CREATED="1734311079017" ID="ID_1399777845" MODIFIED="1734311159072">
@ -88614,8 +88585,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<font face="Monospaced" size="2">with </font><font face="Monospaced" size="2" color="#710b0b">CTOR</font><font face="Monospaced" size="2">&#160;= std::_<b>Bind</b>&lt;</font><font face="Monospaced" size="2" color="#420477">void (*(std::_Placeholder&lt;1&gt;, int))(void*, int&amp;&amp;)</font><font face="Monospaced" size="2">&gt;;</font> <font face="Monospaced" size="2">with </font><font face="Monospaced" size="2" color="#710b0b">CTOR</font><font face="Monospaced" size="2">&#160;= std::_<b>Bind</b>&lt;</font><font face="Monospaced" size="2" color="#420477">void (*(std::_Placeholder&lt;1&gt;, int))(void*, int&amp;&amp;)</font><font face="Monospaced" size="2">&gt;;</font>
</p> </p>
</body> </body>
</html> </html></richcontent>
</richcontent>
<linktarget COLOR="#a502af" DESTINATION="ID_1399777845" ENDARROW="Default" ENDINCLINATION="77;114;" ID="Arrow_ID_1332245965" SOURCE="ID_1282234493" STARTARROW="None" STARTINCLINATION="221;17;"/> <linktarget COLOR="#a502af" DESTINATION="ID_1399777845" ENDARROW="Default" ENDINCLINATION="77;114;" ID="Arrow_ID_1332245965" SOURCE="ID_1282234493" STARTARROW="None" STARTINCLINATION="221;17;"/>
</node> </node>
</node> </node>
@ -88623,6 +88593,203 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<arrowlink COLOR="#a502af" DESTINATION="ID_1399777845" ENDARROW="Default" ENDINCLINATION="77;114;" ID="Arrow_ID_1332245965" STARTARROW="None" STARTINCLINATION="221;17;"/> <arrowlink COLOR="#a502af" DESTINATION="ID_1399777845" ENDARROW="Default" ENDINCLINATION="77;114;" ID="Arrow_ID_1332245965" STARTARROW="None" STARTINCLINATION="221;17;"/>
<icon BUILTIN="stop-sign"/> <icon BUILTIN="stop-sign"/>
</node> </node>
<node CREATED="1734376827379" ID="ID_781787798" MODIFIED="1734376870062" TEXT="Analyse mit direktem Aufruf (try.cpp)">
<node BACKGROUND_COLOR="#fefc4e" COLOR="#351d75" CREATED="1734376872367" ID="ID_1505723613" MODIFIED="1734376903471" TEXT="reproduzierbar">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1734376912301" HGAP="30" ID="ID_1396318540" MODIFIED="1734377033194" TEXT="Problem liegt am bind()-Ausdruck" VSHIFT="19">
<node CREATED="1734376971625" ID="ID_1500057972" MODIFIED="1734376981959" TEXT="nur die Variante ohne weitere Argumente funktioniert"/>
<node CREATED="1734376982941" ID="ID_1093169887" MODIFIED="1734377042591" TEXT="funktioniert auch nicht wenn man die Variadics wegl&#xe4;&#xdf;t"/>
<node CREATED="1734377003920" ID="ID_1513970872" MODIFIED="1734377047351" TEXT="funktioniert auch nicht wenn man jedwede Templates wegl&#xe4;&#xdf;t"/>
<node CREATED="1734377068534" ID="ID_790750756" MODIFIED="1734377094096" TEXT="std::function akzeptiert es nicht"/>
<node CREATED="1734377094946" ID="ID_1562880863" MODIFIED="1734377109874" TEXT="unser lib::meta::_Fun erkennt es nicht als Funktion"/>
<node CREATED="1734377117241" ID="ID_529939193" MODIFIED="1734377124476" TEXT="kann es auch tats&#xe4;chlich nicht aufrufen">
<node CREATED="1734377210261" ID="ID_219419117" MODIFIED="1734377922744" TEXT="template argument deduction/substitution failed"/>
<node CREATED="1734377976414" ID="ID_899976342" MODIFIED="1734377979425" TEXT="Signaturen">
<node CREATED="1734377998260" ID="ID_366994394" MODIFIED="1734378017600">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Aufgerufen:&#160;<font face="Monospaced">(std::_Bind&lt;void (*(std::_Placeholder&lt;1&gt;, int))(void*, int&amp;&amp;)&gt;) (void*&amp;)</font>
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1734378022592" ID="ID_1829030870" MODIFIED="1734378077075">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Candidate:&#160;<font face="Monospaced">_Result std::_Bind&lt;_Functor(_Bound_args ...)&gt;::operator()(_Args&amp;&amp; ...)</font>
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1734378114379" ID="ID_1370955696" MODIFIED="1734378125475">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
&#160;&#160;<font face="Monospaced">_Functor = void (*)(void*, int&amp;&amp;)</font>
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1734378145086" ID="ID_1150616171" MODIFIED="1734378155688">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
&#160;&#160;<font face="Monospaced">_Bound_args = {std::_Placeholder&lt;1&gt;, int}</font>
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1734378499213" ID="ID_424256926" MODIFIED="1734378549609">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Beobachtung:&#160;<font face="Monospaced">_Functor(_Bound_args ...)</font>
</p>
</body>
</html>
</richcontent>
<node CREATED="1734378654651" ID="ID_461500481" MODIFIED="1734378710056" TEXT="void (*(std::_Placeholder&lt;1&gt;, int))(void*, int&amp;&amp;)"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1734378652331" ID="ID_804249162" MODIFIED="1734378687327" TEXT="&#x2260;">
<font NAME="SansSerif" SIZE="14"/>
</node>
<node CREATED="1734378600970" ID="ID_1568813709" MODIFIED="1734378712108" TEXT="(void (*)(void*, int&amp;&amp;)) (std::_Placeholder&lt;1&gt;, int)"/>
</node>
<node COLOR="#5b280f" CREATED="1734380583440" ID="ID_944972328" MODIFIED="1734386726726" TEXT="Nein! das ist es nicht">
<arrowlink COLOR="#5b3840" DESTINATION="ID_544743170" ENDARROW="Default" ENDINCLINATION="119;6;" ID="Arrow_ID_662126387" STARTARROW="None" STARTINCLINATION="-86;10;"/>
<arrowlink COLOR="#fde3e9" DESTINATION="ID_217508249" ENDARROW="Default" ENDINCLINATION="464;20;" ID="Arrow_ID_891244985" STARTARROW="None" STARTINCLINATION="-86;10;"/>
<icon BUILTIN="stop-sign"/>
</node>
</node>
</node>
</node>
<node CREATED="1734380600127" ID="ID_1702540399" MODIFIED="1734380605641" TEXT="reduziertes Beispiel">
<node CREATED="1734380607054" ID="ID_795404603" MODIFIED="1734380615327" TEXT="kein Placeholder"/>
<node CREATED="1734380616275" ID="ID_701523446" MODIFIED="1734380620046" TEXT="nur ein Argument"/>
<node CREATED="1734381356576" ID="ID_544743170" MODIFIED="1734386619880" TEXT="ABER: RValue-Ref als Argument der gebundenen Funktion">
<linktarget COLOR="#5b3840" DESTINATION="ID_544743170" ENDARROW="Default" ENDINCLINATION="119;6;" ID="Arrow_ID_662126387" SOURCE="ID_944972328" STARTARROW="None" STARTINCLINATION="-86;10;"/>
</node>
</node>
</node>
<node CREATED="1734382759141" ID="ID_1882396684" MODIFIED="1734386826582" TEXT="Minimales Beispiel">
<icon BUILTIN="info"/>
<node CREATED="1734383075588" ID="ID_1238945155" MODIFIED="1734383114465" STYLE="bubble">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<div http-equiv="content-type" content="text/html; charset=utf-8" style="color: #000000; background-color: #fffffe; font-family: Consolas, Liberation Mono, Courier, monospace, Droid Sans Mono, monospace, monospace; font-weight: normal; font-size: 14px; line-height: 19px; white-space: pre">
<div>
<font color="#0000ff" face="Monospaced" size="2">#include</font><font color="#000000" face="Monospaced" size="2">&#160;</font><font color="#0000ff" face="Monospaced" size="2">&lt;</font><font color="#a31515" face="Monospaced" size="2">functional</font><font color="#0000ff" face="Monospaced" size="2">&gt;</font>
</div>
<div>
<font color="#0000ff" face="Monospaced" size="2">#include</font><font color="#000000" face="Monospaced" size="2">&#160;</font><font color="#0000ff" face="Monospaced" size="2">&lt;</font><font color="#a31515" face="Monospaced" size="2">iostream</font><font color="#0000ff" face="Monospaced" size="2">&gt;</font>
</div>
<font face="Monospaced" size="2"><br face="Monospaced" size="2" />
</font>
<div>
<font color="#0000ff" face="Monospaced" size="2">inline</font><font color="#000000" face="Monospaced" size="2">&#160;</font><font color="#0000ff" face="Monospaced" size="2">void</font>
</div>
<div>
<font color="#000000" face="Monospaced" size="2">fun (</font><font color="#0000ff" face="Monospaced" size="2">int</font><font color="#000000" face="Monospaced" size="2">&amp;&amp; a)</font>
</div>
<div>
<font color="#000000" face="Monospaced" size="2">{</font>
</div>
<div>
<font color="#000000" face="Monospaced" size="2">std::cout &lt;&lt; a &lt;&lt; std::endl;</font>
</div>
<div>
<font color="#000000" face="Monospaced" size="2">}</font>
</div>
<div>
</div>
<div>
<font color="#0000ff" face="Monospaced" size="2">int</font>
</div>
<div>
<font color="#000000" face="Monospaced" size="2">main (</font><font color="#0000ff" face="Monospaced" size="2">int</font><font color="#000000" face="Monospaced" size="2">, </font><font color="#0000ff" face="Monospaced" size="2">char</font><font color="#000000" face="Monospaced" size="2">**)</font>
</div>
<div>
<font color="#000000" face="Monospaced" size="2">{</font>
</div>
<div>
<font color="#0000ff" face="Monospaced" size="2">auto</font><font color="#000000" face="Monospaced" size="2">&#160;bi = std::bind (fun, </font><font color="#098658" face="Monospaced" size="2">55</font><font color="#000000" face="Monospaced" size="2">);</font>
</div>
<div>
<font color="#000000" face="Monospaced" size="2">bi();</font>
</div>
<div>
<font color="#0000ff" face="Monospaced" size="2">return</font><font color="#000000" face="Monospaced" size="2">&#160;</font><font color="#098658" face="Monospaced" size="2">0</font><font color="#000000" face="Monospaced" size="2">;</font>
</div>
<div>
<font color="#000000" face="Monospaced" size="2">}</font>
</div>
<br />
</div>
</body>
</html>
</richcontent>
</node>
<node BACKGROUND_COLOR="#efb775" COLOR="#fa002a" CREATED="1734383189560" ID="ID_1267982630" MODIFIED="1734386862320" TEXT="Problem reproduzierbar mit neuesten Compilern">
<icon BUILTIN="broken-line"/>
<node CREATED="1734383206198" ID="ID_1168801076" LINK="https://godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(filename:&apos;1&apos;,fontScale:14,fontUsePx:&apos;0&apos;,j:1,lang:c%2B%2B,selection:(endColumn:1,endLineNumber:17,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:17,startColumn:1,startLineNumber:1),source:&apos;%23include+%3Cfunctional%3E%0A%23include+%3Ciostream%3E%0A%0Ainline+void%0Afun+(int%26%26+a)%0A++%7B%0A++++std::cout+%3C%3C+a+%3C%3C+std::endl%3B%0A++%7D%0A++++%0Aint%0Amain+(int,+char**)%0A++%7B%0A++++auto+bi+%3D+std::bind+(fun,+55)%3B%0A++++bi()%3B%0A++++return+0%3B%0A++%7D%0A&apos;),l:&apos;5&apos;,n:&apos;0&apos;,o:&apos;C%2B%2B+source+%231&apos;,t:&apos;0&apos;)),k:52.28357191547376,l:&apos;4&apos;,n:&apos;0&apos;,o:&apos;&apos;,s:0,t:&apos;0&apos;),(g:!((g:!((h:output,i:(editorid:1,fontScale:14,fontUsePx:&apos;0&apos;,j:1,wrap:&apos;1&apos;),l:&apos;5&apos;,n:&apos;0&apos;,o:&apos;Output+of+x86-64+gcc+(trunk)+(Compiler+%231)&apos;,t:&apos;0&apos;)),k:50,l:&apos;4&apos;,m:50,n:&apos;0&apos;,o:&apos;&apos;,s:0,t:&apos;0&apos;),(g:!((h:compiler,i:(compiler:gsnapshot,filters:(b:&apos;0&apos;,binary:&apos;0&apos;,binaryObject:&apos;1&apos;,commentOnly:&apos;0&apos;,debugCalls:&apos;1&apos;,demangle:&apos;0&apos;,directives:&apos;0&apos;,execute:&apos;0&apos;,intel:&apos;0&apos;,libraryCode:&apos;0&apos;,trim:&apos;1&apos;,verboseDemangling:&apos;0&apos;),flagsViewOpen:&apos;1&apos;,fontScale:14,fontUsePx:&apos;0&apos;,j:1,lang:c%2B%2B,libs:!(),options:&apos;&apos;,overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:&apos;5&apos;,n:&apos;0&apos;,o:&apos;+x86-64+gcc+(trunk)+(Editor+%231)&apos;,t:&apos;0&apos;)),header:(),l:&apos;4&apos;,m:50,n:&apos;0&apos;,o:&apos;&apos;,s:0,t:&apos;0&apos;)),k:47.71642808452624,l:&apos;3&apos;,n:&apos;0&apos;,o:&apos;&apos;,t:&apos;0&apos;)),l:&apos;2&apos;,n:&apos;0&apos;,o:&apos;&apos;,t:&apos;0&apos;)),version:4" MODIFIED="1734383340767" TEXT="Godbolt"/>
<node CREATED="1734383353042" ID="ID_651192533" LINK="https://godbolt.org/z/5xvdbEM64" MODIFIED="1734383359752" TEXT="Short-Link"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1734385893133" ID="ID_1856944234" MODIFIED="1734385928505" TEXT="Ursache: Binder liefert eine Kopie">
<icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734381356576" ID="ID_217508249" MODIFIED="1734386742771" TEXT="...und die gebundene Funktion wurde aber f&#xfc;r RValues instantiiert">
<linktarget COLOR="#fde3e9" DESTINATION="ID_217508249" ENDARROW="Default" ENDINCLINATION="464;20;" ID="Arrow_ID_891244985" SOURCE="ID_944972328" STARTARROW="None" STARTINCLINATION="-86;10;"/>
<icon BUILTIN="broken-line"/>
</node>
<node CREATED="1734385977834" ID="ID_1426672931" MODIFIED="1734385991397" TEXT="Das ist wohl ein inh&#xe4;rentes Problem">
<node CREATED="1734385993072" ID="ID_1158678528" LINK="https://stackoverflow.com/q/30968573/444796" MODIFIED="1734386037190" TEXT="Diskussion auf Stackoverflow">
<icon BUILTIN="info"/>
</node>
<node CREATED="1734386435689" ID="ID_1289426456" MODIFIED="1734386491795" TEXT="Workaround: gebundene Funktion f&#xfc;r LValues (Referenzen) instantiieren"/>
<node CREATED="1734386495301" ID="ID_1179078617" MODIFIED="1734388255009">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
also: <font face="Monospaced">func&lt;</font><font face="Monospaced" color="#612549">ARGS</font><font face="Monospaced" color="#ed0212"><b>&amp;</b></font><font face="Monospaced">&#160;...&gt;</font>
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#f7fdca" DESTINATION="ID_1179078617" ENDARROW="Default" ENDINCLINATION="-159;21;" ID="Arrow_ID_1473711263" SOURCE="ID_314389327" STARTARROW="None" STARTINCLINATION="22;-36;"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#bd000b" CREATED="1734386778574" ID="ID_233689242" MODIFIED="1734386807216" TEXT="(funktioniert nat&#xfc;rlich nicht mit allen Typen...)">
<font NAME="SansSerif" SIZE="8"/>
<node CREATED="1734387463481" HGAP="34" ID="ID_1440834304" LINK="http://en.cppreference.com/w/cpp/utility/functional/bind#Member_function_operator.28.29" MODIFIED="1734387491134" TEXT="siehe Doku f&#xfc;r std::bind" VSHIFT="7">
<icon BUILTIN="info"/>
</node>
</node>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1734388195447" ID="ID_1278882594" MODIFIED="1734388372025" TEXT="Workaround: Typen f&#xfc;r Argumente im Type-Handler auf Kopie umschreiben">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#cdd0af" CREATED="1734388228011" ID="ID_314389327" MODIFIED="1734388299434" TEXT="direkt wie auf Stackoverflow gezeigt">
<arrowlink COLOR="#f7fdca" DESTINATION="ID_1179078617" ENDARROW="Default" ENDINCLINATION="-159;21;" ID="Arrow_ID_1473711263" STARTARROW="None" STARTINCLINATION="22;-36;"/>
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#163792" CREATED="1734388306532" ID="ID_835024295" MODIFIED="1734388882033" TEXT="mit den offensichtlichen Einschr&#xe4;nkungen &#x2014; die ich vorerst auf sich beruhen lasse">
<linktarget COLOR="#7e1a3e" DESTINATION="ID_835024295" ENDARROW="Default" ENDINCLINATION="66;330;" ID="Arrow_ID_1506573281" SOURCE="ID_1635091232" STARTARROW="None" STARTINCLINATION="-952;66;"/>
<icon BUILTIN="messagebox_warning"/>
</node> </node>
</node> </node>
</node> </node>
@ -91887,6 +92054,20 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133400400" ID="ID_1364724277" MODIFIED="1734141875620" TEXT="zus&#xe4;tzlichen Funktor f&#xfc;r die Parameter akzeptieren"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133400400" ID="ID_1364724277" MODIFIED="1734141875620" TEXT="zus&#xe4;tzlichen Funktor f&#xfc;r die Parameter akzeptieren">
<arrowlink COLOR="#c0023e" DESTINATION="ID_1127056731" ENDARROW="Default" ENDINCLINATION="-1257;-48;" ID="Arrow_ID_1717201620" STARTARROW="None" STARTINCLINATION="-908;50;"/> <arrowlink COLOR="#c0023e" DESTINATION="ID_1127056731" ENDARROW="Default" ENDINCLINATION="-1257;-48;" ID="Arrow_ID_1717201620" STARTARROW="None" STARTINCLINATION="-908;50;"/>
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1734388801494" ID="ID_1469272212" MODIFIED="1734389073266" TEXT="Hier k&#xf6;nnte ein Buffer-Typ-Konstruktor mit eingebunden werden">
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#e2be92" CREATED="1734388824979" ID="ID_1655919747" MODIFIED="1734389385989" TEXT="dieses Thema tauchte im Design immer wieder auf">
<arrowlink COLOR="#a94eac" DESTINATION="ID_960529387" ENDARROW="Default" ENDINCLINATION="-357;-399;" ID="Arrow_ID_1864365252" STARTARROW="None" STARTINCLINATION="822;40;"/>
<linktarget COLOR="#6c169e" DESTINATION="ID_1655919747" ENDARROW="Default" ENDINCLINATION="619;33;" ID="Arrow_ID_1405551684" SOURCE="ID_1586871031" STARTARROW="None" STARTINCLINATION="-249;15;"/>
<icon BUILTIN="bell"/>
</node>
<node CREATED="1734388839099" ID="ID_892140003" MODIFIED="1734388850539" TEXT="es k&#xf6;nnte weitere Probleme nebenbei mit l&#xf6;sen"/>
<node CREATED="1734388851863" ID="ID_1985594589" MODIFIED="1734388873007" TEXT="ist aber im Detail anspruchsvoll in der Umsetzung"/>
<node BACKGROUND_COLOR="#e2c190" COLOR="#a50125" CREATED="1734388447261" ID="ID_1635091232" MODIFIED="1734388882032" TEXT="Typ-Konstruktor-&#x3bb; hat Einschr&#xe4;nkungen">
<arrowlink COLOR="#7e1a3e" DESTINATION="ID_835024295" ENDARROW="Default" ENDINCLINATION="66;330;" ID="Arrow_ID_1506573281" STARTARROW="None" STARTINCLINATION="-952;66;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734196306235" ID="ID_1975026226" MODIFIED="1734196338552" TEXT="Funktor geht mit in den Turnout-Typ ein"> <node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734196306235" ID="ID_1975026226" MODIFIED="1734196338552" TEXT="Funktor geht mit in den Turnout-Typ ein">
<icon BUILTIN="messagebox_warning"/> <icon BUILTIN="messagebox_warning"/>
<node CREATED="1734196346326" ID="ID_362452179" MODIFIED="1734196435265" TEXT="std::function hier kann Template-Bloat reduzieren"> <node CREATED="1734196346326" ID="ID_362452179" MODIFIED="1734196435265" TEXT="std::function hier kann Template-Bloat reduzieren">
@ -91929,8 +92110,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
F&#252;r die BuffTable war fr&#252;her jede Menge Funktionalit&#228;t geplant, die inzwischen im BufferProvider realisiert wurde; der alte Test h&#228;ngt seit &gt;10 Jahren bei den Engine-Tests unimplementiert mit rum &#8212; es ist sinnlos, ihn nun umzuwidmen F&#252;r die BuffTable war fr&#252;her jede Menge Funktionalit&#228;t geplant, die inzwischen im BufferProvider realisiert wurde; der alte Test h&#228;ngt seit &gt;10 Jahren bei den Engine-Tests unimplementiert mit rum &#8212; es ist sinnlos, ihn nun umzuwidmen
</p> </p>
</body> </body>
</html> </html></richcontent>
</richcontent>
<icon BUILTIN="button_cancel"/> <icon BUILTIN="button_cancel"/>
</node> </node>
<node CREATED="1734309990069" ID="ID_1710382999" MODIFIED="1734310510263" TEXT="angesiedelt in NodeBase_test"> <node CREATED="1734309990069" ID="ID_1710382999" MODIFIED="1734310510263" TEXT="angesiedelt in NodeBase_test">
@ -92151,9 +92331,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent> </html></richcontent>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1721838899545" ID="ID_960529387" MODIFIED="1721844774406" TEXT="doch wieder auf die Buffer-Konstruktor-Closure zur&#xfc;ckkommen?"> <node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1721838899545" ID="ID_960529387" MODIFIED="1734389385989" TEXT="doch wieder auf die Buffer-Konstruktor-Closure zur&#xfc;ckkommen?">
<arrowlink COLOR="#b42d6a" DESTINATION="ID_1819206244" ENDARROW="Default" ENDINCLINATION="43;40;" ID="Arrow_ID_1051671986" STARTARROW="None" STARTINCLINATION="13;-15;"/> <arrowlink COLOR="#b42d6a" DESTINATION="ID_1819206244" ENDARROW="Default" ENDINCLINATION="43;40;" ID="Arrow_ID_1051671986" STARTARROW="None" STARTINCLINATION="13;-15;"/>
<linktarget COLOR="#332ba3" DESTINATION="ID_960529387" ENDARROW="Default" ENDINCLINATION="-46;-257;" ID="Arrow_ID_977971374" SOURCE="ID_1119846327" STARTARROW="None" STARTINCLINATION="-22;219;"/> <linktarget COLOR="#332ba3" DESTINATION="ID_960529387" ENDARROW="Default" ENDINCLINATION="-46;-257;" ID="Arrow_ID_977971374" SOURCE="ID_1119846327" STARTARROW="None" STARTINCLINATION="-22;219;"/>
<linktarget COLOR="#a94eac" DESTINATION="ID_960529387" ENDARROW="Default" ENDINCLINATION="-357;-399;" ID="Arrow_ID_1864365252" SOURCE="ID_1655919747" STARTARROW="None" STARTINCLINATION="822;40;"/>
<font NAME="SansSerif" SIZE="12"/> <font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="help"/> <icon BUILTIN="help"/>
<icon BUILTIN="hourglass"/> <icon BUILTIN="hourglass"/>
@ -93182,6 +93363,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
<node BACKGROUND_COLOR="#fed3ac" COLOR="#990033" CREATED="1731889726616" ID="ID_1814790289" MODIFIED="1731889761047" TEXT="zu kl&#xe4;ren: wer instruiert den BufferProvider?"> <node BACKGROUND_COLOR="#fed3ac" COLOR="#990033" CREATED="1731889726616" ID="ID_1814790289" MODIFIED="1731889761047" TEXT="zu kl&#xe4;ren: wer instruiert den BufferProvider?">
<icon BUILTIN="help"/> <icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734388913415" HGAP="29" ID="ID_1586871031" MODIFIED="1734389094228" TEXT="Zusammenhang mit dem Thema Konstruktor-&#x3bb;" VSHIFT="11">
<arrowlink COLOR="#6c169e" DESTINATION="ID_1655919747" ENDARROW="Default" ENDINCLINATION="619;33;" ID="Arrow_ID_1405551684" STARTARROW="None" STARTINCLINATION="-249;15;"/>
<icon BUILTIN="bell"/>
</node>
</node> </node>
</node> </node>
</node> </node>
@ -94913,7 +95098,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1720178577432" ID="ID_563185736" MODIFIED="1720178597453" TEXT="ADA &#x2261; Typ der Invocation-Adapter Klasse"/> <node CREATED="1720178577432" ID="ID_563185736" MODIFIED="1720178597453" TEXT="ADA &#x2261; Typ der Invocation-Adapter Klasse"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1720999461725" ID="ID_668512282" MODIFIED="1728436131057" TEXT="kl&#xe4;ren: wo/wie wird diese instantiiert?"> <node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1720999461725" ID="ID_668512282" MODIFIED="1728436131057" TEXT="kl&#xe4;ren: wo/wie wird diese instantiiert?">
<arrowlink COLOR="#8c303b" DESTINATION="ID_1536301470" ENDARROW="Default" ENDINCLINATION="-653;972;" ID="Arrow_ID_1675114658" STARTARROW="None" STARTINCLINATION="373;-24;"/> <arrowlink COLOR="#8c303b" DESTINATION="ID_1536301470" ENDARROW="Default" ENDINCLINATION="-653;972;" ID="Arrow_ID_1675114658" STARTARROW="None" STARTINCLINATION="373;-24;"/>
<linktarget COLOR="#cd0172" DESTINATION="ID_668512282" ENDARROW="Default" ENDINCLINATION="-522;-42;" ID="Arrow_ID_1453353099" SOURCE="ID_1951506826" STARTARROW="None" STARTINCLINATION="651;43;"/> <linktarget COLOR="#cd0172" DESTINATION="ID_668512282" ENDARROW="Default" ENDINCLINATION="-522;-42;" ID="Arrow_ID_1453353099" SOURCE="ID_1951506826" STARTARROW="None" STARTINCLINATION="645;44;"/>
<icon BUILTIN="help"/> <icon BUILTIN="help"/>
<node CREATED="1720999894058" ID="ID_214293974" MODIFIED="1728514565103" TEXT="Instantiiert wird sie erst im Turnout::weave()"> <node CREATED="1720999894058" ID="ID_214293974" MODIFIED="1728514565103" TEXT="Instantiiert wird sie erst im Turnout::weave()">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
@ -95770,7 +95955,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1731890254602" ID="ID_447051297" MODIFIED="1731890346832" TEXT="brauche Buffer"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1731890254602" ID="ID_447051297" MODIFIED="1734388971845" TEXT="brauche Buffer">
<arrowlink COLOR="#bb4c6b" DESTINATION="ID_1319945622" ENDARROW="Default" ENDINCLINATION="-663;35;" ID="Arrow_ID_542692149" STARTARROW="None" STARTINCLINATION="745;112;"/> <arrowlink COLOR="#bb4c6b" DESTINATION="ID_1319945622" ENDARROW="Default" ENDINCLINATION="-663;35;" ID="Arrow_ID_542692149" STARTARROW="None" STARTINCLINATION="745;112;"/>
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="flag-yellow"/>
</node> </node>