From 13ef36ba01a2e192f6a307314917b174730cbe8b Mon Sep 17 00:00:00 2001 From: q66 Date: Sat, 11 Jul 2015 03:26:57 +0100 Subject: [PATCH] add some tuple funcs --- octa/tuple.hh | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/octa/tuple.hh b/octa/tuple.hh index 64acabd..8ca4029 100644 --- a/octa/tuple.hh +++ b/octa/tuple.hh @@ -439,6 +439,49 @@ inline Tuple tie(T &...t) { return Tuple(t...); } +/* ignore */ + +namespace detail { + struct Ignore { + template + const Ignore &operator=(T &&) const { return *this; } + }; +} + +static const detail::Ignore ignore = detail::Ignore(); + +/* make tuple */ + +namespace detail { + template + struct MakeTupleReturnType { + using Type = T; + }; + + template + struct MakeTupleReturnType> { + using Type = T &; + }; + + template + struct MakeTupleReturn { + using Type = typename MakeTupleReturnType>::Type; + }; +} + +template +inline Tuple::Type...> +make_tuple(T &&...t) { + return Tuple::Type...>(forward(t)...); +} + +/* forward as tuple */ + +template +inline Tuple forward_as_tuple(T &&...t) { + return Tuple(forward(t)...); +} + } /* namespace octa */ #endif \ No newline at end of file