diff --git a/src/lib/iter-tree-explorer.hpp b/src/lib/iter-tree-explorer.hpp index edd579d00..0233249bf 100644 --- a/src/lib/iter-tree-explorer.hpp +++ b/src/lib/iter-tree-explorer.hpp @@ -522,7 +522,7 @@ namespace lib { /** adapt to a functor, which accepts the value type of the source sequence ("monadic" usage pattern) */ template - struct ArgAdapter + struct ArgAdapter ,__not_>>>> // need to exclude the latter, since IterableDecorator { // often seems to accept IT::value_type (while in fact it doesn't) static auto diff --git a/src/lib/itertools.hpp b/src/lib/itertools.hpp index 1b52f7c7b..253331bbe 100644 --- a/src/lib/itertools.hpp +++ b/src/lib/itertools.hpp @@ -616,9 +616,9 @@ namespace lib { return theValue_.isValid(); } - typedef typename std::remove_reference::type * pointer; - typedef typename std::remove_reference::type & reference; - typedef typename std::remove_reference::type value_type; + typedef std::remove_reference_t * pointer; + typedef std::remove_reference_t & reference; + typedef std::remove_reference_t value_type; }; diff --git a/tests/core/steam/engine/mock-support-test.cpp b/tests/core/steam/engine/mock-support-test.cpp index 73302f130..f93c68931 100644 --- a/tests/core/steam/engine/mock-support-test.cpp +++ b/tests/core/steam/engine/mock-support-test.cpp @@ -369,16 +369,22 @@ namespace test { using ExpandedChildren = typename lib::iter_explorer::_FunTraits::Res; -// using ResCore = lib::iter_explorer::Expander; using ResIter = typename lib::iter_explorer::DecoTraits::SrcIter; using ResIterVal = typename ResIter::value_type; using SrcIterVal = typename SrC::value_type; -// lib::test::TypeDebugger buggy; + //lib::test::TypeDebugger buggy; // lib::test::TypeDebugger bugggy; + using FunResTrait = lib::iter_explorer::_FunTraits; + using FunArg = typename FunResTrait::Arg; + using ArgAdaptRes = typename FunResTrait::ArgAdapter; + static_assert(std::is_convertible()); +// lib::test::TypeDebugger buggy; + + using ResCore = lib::iter_explorer::Expander; + -#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1294 auto it = lib::explore(start) // .transform ([](RTick t) -> JobTicket const& // { @@ -386,11 +392,12 @@ namespace test { // }) .expand (funny) .expandAll() - .transform ([&](JobTicket const& ticket) + .transform ([&](JobTicket * ticket) { - return ticket.createJobFor(coord).parameter.invoKey.part.a; + return ticket->createJobFor(coord).parameter.invoKey.part.a; }); cout << util::join(it,"-") < + @@ -70008,14 +70009,14 @@ - + - - + + @@ -70088,8 +70089,8 @@ - - + + @@ -70114,8 +70115,8 @@ - - + + @@ -70127,12 +70128,57 @@ - + + + + + + + + + + +

+ aber ResIter::value_type war JobTicket +

+ +
+ +
+ + + +
+ + + + + + +

+ Das Design an der Stelle ist schon in Ordnung: als Base-Case nehmen wir die Situation, in der der Funktor eben gar nicht mehr adaptiert werden muß — auch wenn das rein logisch ein Sonderfall ist; andererseits erfordert der rein logisch „einfachste“ Fall eben eine zusätzliche Operation, nämlich eine Dereferenzierung des Quell-Iterators — und es ist sinnlos, diesen Spezialfall zu verdrahten, wenn die Typen nicht passen. Hinzu kommt, daß wir mit dieser Anordnung auch gezielter die Parameter-Typen prüfen können +

+ +
+ +
+ + + + + + + + + + + + @@ -70172,8 +70218,8 @@
- - + + @@ -70220,8 +70266,8 @@ - - + + @@ -70275,12 +70321,15 @@ - + + + - + + @@ -70338,7 +70387,7 @@ - + @@ -70398,15 +70447,31 @@ - + + - + + + + + + +

+ Fazit: Konversion in SRC::value_type ist per Abschwächung die korrekte Forderung +

+ +
+ + +
+
+
- + @@ -70442,6 +70507,7 @@ + @@ -70498,7 +70564,7 @@ - + @@ -70513,6 +70579,7 @@ + @@ -71153,10 +71220,44 @@ + + + + + + + + + + + +
+ + + + + + + + + +

+ ...welches sich hier konkret so manifestiert hat, daß der ResultIterator::value_type falsch deduziert wurde als JobTicket  (anstatt JobTicket* ) +

+ +
+
+ + + + + + +