From 3da370000c017b39174f4bdc7202add4bd3e3c58 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Wed, 27 Sep 2017 20:07:51 +0200 Subject: [PATCH] Investigation: likely the only way to get it to work seems to be impossible to get rid of the intermediary argument repackaging delegate call. As always the reason is that argument packs are no real first class types --- research/try.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/research/try.cpp b/research/try.cpp index 29ed4d5ca..5b1387ae2 100644 --- a/research/try.cpp +++ b/research/try.cpp @@ -102,6 +102,8 @@ struct Pick { return Pick::get (args...); } + + static auto get() { return nullptr; } }; template<> @@ -113,18 +115,22 @@ struct Pick<0> { return a; } + + static auto get() { return nullptr; } }; + using Arr = std::array; -template -void -dispatch_ (IndexSeq, ARGS...args) +template +Arr +dispatch_ (IndexSeq,IndexSeq, ARGS...args) { - - fun2 (Pick::get(args...) ...); + Arr arr{Pick::get(args...) ...}; + fun2 (Pick::get(args...) ...); + return arr; } template @@ -136,10 +142,7 @@ dispatch (ARGS...args) using First = typename BuildIndexSeq<3>::Ascending; using Next = typename BuildIndexSeq<3>::OffsetBy<3>; - dispatch_ (First(), args...); - dispatch_ (Next(), args...); - Arr arr{9,8,7}; - return arr; + return dispatch_ (First(),Next(), args...); }