Library: investigate case with known element type
- the test-dummy objects need a `noexcept` move ctor - **bug** here: need an explicit check to prevent other types than the known element type from ''sneaking in''
This commit is contained in:
parent
006809712e
commit
d9f86ad891
4 changed files with 85 additions and 7 deletions
|
|
@ -242,8 +242,9 @@ namespace lib {
|
|||
}
|
||||
else
|
||||
{
|
||||
E& oldElm = reinterpret_cast<E&> (src->subscript (idx));
|
||||
Fac::template createAt<E> (tar, idx
|
||||
,std::move_if_noexcept (src->subscript(idx)));
|
||||
,std::move_if_noexcept (oldElm));
|
||||
}
|
||||
tar->cnt = idx+1; // mark fill continuously for proper clean-up after exception
|
||||
}
|
||||
|
|
@ -327,7 +328,7 @@ namespace lib {
|
|||
fillElm (size_t cntNew, ARGS&& ...args)
|
||||
{
|
||||
for ( ; 0<cntNew; --cntNew)
|
||||
emplaceNewElm<I> (forward<ARGS> (args)...);
|
||||
emplaceNewElm<E> (forward<ARGS> (args)...);
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ namespace test{
|
|||
: val_(v)
|
||||
{ init(); }
|
||||
|
||||
Dummy (Dummy && oDummy)
|
||||
Dummy (Dummy && oDummy) noexcept
|
||||
: Dummy(0)
|
||||
{
|
||||
swap (*this, oDummy);
|
||||
|
|
|
|||
|
|
@ -87,6 +87,28 @@ namespace test{
|
|||
{
|
||||
return i+ii + explore(ext_).resultSum();
|
||||
}
|
||||
|
||||
/// allow for move construction
|
||||
Num (Num && oNum) noexcept
|
||||
: Num(0)
|
||||
{
|
||||
swap (*this, oNum);
|
||||
}
|
||||
Num&
|
||||
operator= (Num && oNum)
|
||||
{
|
||||
if (&oNum != this)
|
||||
swap (*this, oNum);
|
||||
return *this;
|
||||
}
|
||||
|
||||
friend void
|
||||
swap (Num& num1, Num& num2) ///< checksum neutral
|
||||
{
|
||||
std::swap (static_cast<Dummy&> (num1)
|
||||
,static_cast<Dummy&> (num2));
|
||||
std::swap (num1.ext_, num2.ext_);
|
||||
}
|
||||
};
|
||||
|
||||
} // (END) test types
|
||||
|
|
@ -248,6 +270,26 @@ namespace test{
|
|||
, builder.fillElm (20) );
|
||||
CHECK (10 == builder.size());
|
||||
}
|
||||
|
||||
{ // Scenario-2 : Baseclass and elements of a single fixed subclass
|
||||
SeveralBuilder<Dummy, Num<5>> builder;
|
||||
|
||||
Dummy dum;
|
||||
SHOW_EXPR(dum.getVal())
|
||||
Dummy nem{move(dum)};
|
||||
SHOW_EXPR(dum.getVal())
|
||||
SHOW_EXPR(nem.getVal())
|
||||
Num<5> no5;
|
||||
SHOW_EXPR(no5.getVal())
|
||||
Num<5> ne5{move(no5)};
|
||||
SHOW_EXPR(no5.getVal())
|
||||
SHOW_EXPR(ne5.getVal())
|
||||
|
||||
builder.fillElm(5);
|
||||
CHECK (5 == builder.size());
|
||||
|
||||
builder.emplace<Num<1>>(); ///////////////////////////////////OOO this should trigger an exception -> need to code an explicit check right at the start of emplaceNewElm()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -82741,7 +82741,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1717980838451" ID="ID_123345043" MODIFIED="1717980849735" TEXT="hab es jetzt vorerst doch wieder dorthin geschoben"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717980850354" ID="ID_1951694568" MODIFIED="1717980857530" TEXT="TODO: bessere Lösung finden">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717980850354" ID="ID_1951694568" MODIFIED="1718158733534" TEXT="TODO: bessere Lösung finden">
|
||||
<linktarget COLOR="#ea004d" DESTINATION="ID_1951694568" ENDARROW="Default" ENDINCLINATION="456;43;" ID="Arrow_ID_13456577" SOURCE="ID_1048202028" STARTARROW="None" STARTINCLINATION="325;-27;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -83375,9 +83376,43 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#435e98" CREATED="1718153109115" ID="ID_443086499" MODIFIED="1718153130346" STYLE="fork" TEXT="kein Typ mit anderem nicht-passenden Destruktor-Schema"/>
|
||||
<node COLOR="#435e98" CREATED="1718122010547" ID="ID_1757791910" MODIFIED="1718153130345" STYLE="fork" TEXT="nicht genügend Storage und kann nicht verschieben"/>
|
||||
</node>
|
||||
<node CREATED="1718122030712" ID="ID_1960968889" MODIFIED="1718122040234" TEXT="Base + bekanntes E">
|
||||
<node CREATED="1718122066531" ID="ID_1633309056" MODIFIED="1718122076582" TEXT="kann wachsen (da move-ctor bekannt)"/>
|
||||
<node CREATED="1718122077386" ID="ID_959961694" MODIFIED="1718122087388" TEXT="kann keinen anderen Typ platzieren (selbst wenn kleiner)"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1718122030712" ID="ID_1960968889" MODIFIED="1718158946391" TEXT="Base + bekanntes E">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1718122066531" ID="ID_1633309056" MODIFIED="1718122076582" TEXT="kann wachsen (da move-ctor bekannt)">
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#761b6d" CREATED="1718158865620" ID="ID_1008642521" MODIFIED="1718158939698" TEXT="erst mal muß Num<5> auch einen move-ctor haben">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#761b6d" CREATED="1718158901756" ID="ID_1578123647" MODIFIED="1718158939699">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
und der von Dummy muß <b>noexcept</b> sein
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1718122077386" ID="ID_959961694" MODIFIED="1718122087388" TEXT="kann keinen anderen Typ platzieren (selbst wenn kleiner)">
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1718157829884" ID="ID_1228814618" MODIFIED="1718157836660" TEXT="spricht nicht an">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1718157847914" ID="ID_1926254706" MODIFIED="1718157851469" TEXT="Beobachtungen">
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1718157852441" ID="ID_1384707564" MODIFIED="1718157871000" TEXT="probeMoveCapability<TY>() setzt gleich zu Beginn die move-Sperre">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1718158012556" ID="ID_240735780" MODIFIED="1718158019734" TEXT="das ist logisch falsch...."/>
|
||||
<node CREATED="1718158020275" ID="ID_1916533180" MODIFIED="1718158029781" TEXT="wir dürften diesen Punkt gar nicht erreichen"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1718158031369" ID="ID_1048202028" MODIFIED="1718158733534" TEXT="Ja... hier fehlt ein expliziter Check">
|
||||
<arrowlink COLOR="#ea004d" DESTINATION="ID_1951694568" ENDARROW="Default" ENDINCLINATION="456;43;" ID="Arrow_ID_13456577" STARTARROW="None" STARTINCLINATION="325;-27;"/>
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1718122252659" ID="ID_616405505" MODIFIED="1718122291873" TEXT="Triviale Typen">
|
||||
<node CREATED="1718122293022" ID="ID_697520417" MODIFIED="1718122302248" TEXT="kann wachsen"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue