diff --git a/src/lib/iter-tree-explorer.hpp b/src/lib/iter-tree-explorer.hpp index 2bf94e392..b3a18bbe0 100644 --- a/src/lib/iter-tree-explorer.hpp +++ b/src/lib/iter-tree-explorer.hpp @@ -793,32 +793,31 @@ namespace lib { * is adapted in a similar way as the "expand functor", so to detect and convert the * expected input on invocation. */ - template + template class Transformer : public SRC { static_assert(can_IterForEach::value, "Lumiera Iterator required as source"); - using _Traits = _FunTraits; - using Res = typename _Traits::Res; - using TransformFunctor = typename _Traits::Functor; - using TransformedItem = wrapper::ItemWrapper; + using TransformFunctor = function; + using TransformedItem = wrapper::ItemWrapper; TransformFunctor trafo_; TransformedItem treated_; public: - using value_type = typename meta::TypeBinding::value_type; - using reference = typename meta::TypeBinding::reference; - using pointer = typename meta::TypeBinding::pointer; + using value_type = typename meta::TypeBinding::value_type; + using reference = typename meta::TypeBinding::reference; + using pointer = typename meta::TypeBinding::pointer; Transformer() =default; // inherited default copy operations + template Transformer (SRC&& dataSrc, FUN&& transformFunctor) : SRC{move (dataSrc)} - , trafo_{forward (transformFunctor)} + , trafo_{_FunTraits::template adaptFunctor (forward (transformFunctor))} { } @@ -1437,7 +1436,9 @@ namespace lib { auto transform (FUN&& transformFunctor) { - using ResCore = iter_explorer::Transformer; + using Product = typename iter_explorer::_FunTraits::Res; + + using ResCore = iter_explorer::Transformer; using ResIter = typename _DecoratorTraits::SrcIter; return TreeExplorer (ResCore {move(*this), forward(transformFunctor)}); diff --git a/src/lib/wrapper.hpp b/src/lib/wrapper.hpp index aa66db2fe..363274fb6 100644 --- a/src/lib/wrapper.hpp +++ b/src/lib/wrapper.hpp @@ -185,11 +185,13 @@ namespace wrapper { explicit ItemWrapper(TY const& o) + : created_(false) { build (o); } explicit ItemWrapper(TY && ro) + : created_(false) { build (std::move(ro)); } diff --git a/tests/library/iter-tree-explorer-test.cpp b/tests/library/iter-tree-explorer-test.cpp index 588be76c4..914349475 100644 --- a/tests/library/iter-tree-explorer-test.cpp +++ b/tests/library/iter-tree-explorer-test.cpp @@ -517,6 +517,7 @@ namespace test{ .transform(multiply) ; + CHECK (14 == *ii); CHECK (14 == *ii); ++ii; CHECK (12 == *ii); diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index a892bba72..bab370530 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -31200,8 +31200,8 @@ - - + + @@ -31318,8 +31318,8 @@ - - + + @@ -31358,6 +31358,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + +