diff --git a/alib2std/src/extensions/ptr_tuple.hpp b/alib2std/src/extensions/ptr_tuple.hpp index 4bb5efa8856c74365579e093641a4f7d54fc9ab5..0260455c1efbc0787483c5f8a0d5433f29d69acf 100644 --- a/alib2std/src/extensions/ptr_tuple.hpp +++ b/alib2std/src/extensions/ptr_tuple.hpp @@ -505,20 +505,20 @@ struct tuple_element < I, ext::ptr_tuple < Types... > > { typedef typename std::tuple_element < I, std::tuple < Types ... > >::type type; }; -template < class Result, unsigned I, class Callable, class ... Types > -struct call_on_nth_helper < Result, I, ext::ptr_tuple < Types ... >, Callable > { - template < class Tuple > +template < class Result, unsigned I, class ... Types > +struct call_on_nth_helper < Result, I, ext::ptr_tuple < Types ... > > { + template < class Tuple, class Callable > static Result call_on_nth_fn ( Tuple && t, unsigned index, Callable callback ) { if ( index == 0 ) - return callback ( std::get < ext::tuple_size < Tuple >::value - I > ( std::forward < ext::ptr_tuple < Types ... > > ( t ) ) ); + return callback ( std::get < ext::tuple_size < Tuple >::value - I > ( std::forward < Tuple && > ( t ) ) ); else - return call_on_nth_helper < Result, I - 1, ext::ptr_tuple < Types ... >, Callable >::call_on_nth_fn ( std::forward < Tuple && > ( t ), index - 1, callback ); + return call_on_nth_helper < Result, I - 1, ext::ptr_tuple < Types ... > >::call_on_nth_fn ( std::forward < Tuple && > ( t ), index - 1, callback ); } }; -template < class Result, class Callable, class ... Types > -struct call_on_nth_helper < Result, 0, ext::ptr_tuple < Types ... >, Callable > { - template < class Tuple > +template < class Result, class ... Types > +struct call_on_nth_helper < Result, 0, ext::ptr_tuple < Types ... > > { + template < class Tuple, class Callable > static Result call_on_nth_fn ( Tuple &&, unsigned, Callable ) { throw std::out_of_range ( "Not enough elements in tuple." ); } diff --git a/alib2std/src/extensions/tuple.hpp b/alib2std/src/extensions/tuple.hpp index 1e30ced3607b0c21a5a296fc4d2dbdf9f771e9ed..77d8fca14131013d2afdf0c43243df36f14b064c 100644 --- a/alib2std/src/extensions/tuple.hpp +++ b/alib2std/src/extensions/tuple.hpp @@ -91,23 +91,23 @@ struct tuple_element < I, const volatile T > { typedef typename std::add_cv < typename ext::tuple_element < I, T >::type >::type type; }; -template < class Result, unsigned I, class Tuple, class Callable > +template < class Result, unsigned I, class Tuple > struct call_on_nth_helper; -template < class Result, unsigned I, class Callable, class ... Types > -struct call_on_nth_helper < Result, I, ext::tuple < Types ... >, Callable > { - template < class Tuple > +template < class Result, unsigned I, class ... Types > +struct call_on_nth_helper < Result, I, ext::tuple < Types ... > > { + template < class Tuple, class Callable > static Result call_on_nth_fn ( Tuple && t, unsigned index, Callable callback ) { if ( index == 0 ) return callback ( std::get < ext::tuple_size < Tuple >::value - I > ( std::forward < Tuple && > ( t ) ) ); else - return call_on_nth_helper < Result, I - 1, ext::tuple < Types ... >, Callable >::call_on_nth_fn ( std::forward < Tuple && > ( t ), index - 1, callback ); + return call_on_nth_helper < Result, I - 1, ext::tuple < Types ... > >::call_on_nth_fn ( std::forward < Tuple && > ( t ), index - 1, callback ); } }; -template < class Result, class Callable, class ... Types > -struct call_on_nth_helper < Result, 0, ext::tuple < Types ... >, Callable > { - template < class Tuple > +template < class Result, class ... Types > +struct call_on_nth_helper < Result, 0, ext::tuple < Types ... > > { + template < class Tuple, class Callable > static Result call_on_nth_fn ( Tuple &&, unsigned, Callable ) { throw std::out_of_range ( "Not enough elements in tuple." ); } @@ -115,7 +115,7 @@ struct call_on_nth_helper < Result, 0, ext::tuple < Types ... >, Callable > { template < class Result, class Tuple, class Callable > Result call_on_nth ( Tuple && t, unsigned index, Callable callback ) { - return call_on_nth_helper < Result, ext::tuple_size < Tuple >::value, typename std::decay < Tuple >::type, Callable >::call_on_nth_fn ( std::forward < Tuple && > ( t ), index, callback ); + return call_on_nth_helper < Result, ext::tuple_size < Tuple >::value, typename std::decay < Tuple >::type >::call_on_nth_fn ( std::forward < Tuple && > ( t ), index, callback ); }