From 4a871db249be54f828eb8244b42bc52edf6dca70 Mon Sep 17 00:00:00 2001 From: q66 Date: Sat, 11 Jul 2015 15:17:12 +0100 Subject: [PATCH] move TupleElementBase out of namespace detail (meant to be overloaded) --- octa/array.hh | 10 +++---- octa/internal/tuple.hh | 67 +++++++++++++++++++++--------------------- octa/tuple.hh | 10 +++---- octa/utility.hh | 20 ++++++------- 4 files changed, 51 insertions(+), 56 deletions(-) diff --git a/octa/array.hh b/octa/array.hh index efb1ec6..7555679 100644 --- a/octa/array.hh +++ b/octa/array.hh @@ -79,12 +79,10 @@ struct Array { template struct TupleSize>: IntegralConstant {}; -namespace detail { - template - struct TupleElementBase> { - using Type = T; - }; -} +template +struct TupleElementBase> { + using Type = T; +}; template TupleElement> &get(Array &a) { diff --git a/octa/internal/tuple.hh b/octa/internal/tuple.hh index 9ab83a3..eed9329 100644 --- a/octa/internal/tuple.hh +++ b/octa/internal/tuple.hh @@ -26,24 +26,22 @@ template struct TupleSize: public TupleSize {}; /* tuple element */ -namespace detail { - template struct TupleElementBase; - template - struct TupleElementBase { - using Type = AddConst::Type>; - }; - template - struct TupleElementBase { - using Type = AddVolatile::Type>; - }; - template - struct TupleElementBase { - using Type = AddCv::Type>; - }; -} +template struct TupleElementBase; +template +struct TupleElementBase { + using Type = AddConst::Type>; +}; +template +struct TupleElementBase { + using Type = AddVolatile::Type>; +}; +template +struct TupleElementBase { + using Type = AddCv::Type>; +}; template -using TupleElement = typename detail::TupleElementBase::Type; +using TupleElement = typename TupleElementBase::Type; /* is tuple-like */ @@ -123,26 +121,27 @@ namespace detail { namespace detail { template struct TupleTypes {}; - - template struct TupleElementBase> { - public: - static_assert(I == 0, "TupleElement index out of range"); - static_assert(I != 0, "TupleElement index out of range"); - }; - - template - struct TupleElementBase<0, TupleTypes> { - public: - using Type = H; - }; - - template - struct TupleElementBase> { - public: - using Type = typename TupleElementBase>::Type; - }; } +template struct TupleElementBase> { +public: + static_assert(I == 0, "TupleElement index out of range"); + static_assert(I != 0, "TupleElement index out of range"); +}; + +template +struct TupleElementBase<0, detail::TupleTypes> { +public: + using Type = H; +}; + +template +struct TupleElementBase> { +public: + using Type = typename TupleElementBase>::Type; +}; + template struct TupleSize>: IntegralConstant {}; diff --git a/octa/tuple.hh b/octa/tuple.hh index c06422d..cfcc912 100644 --- a/octa/tuple.hh +++ b/octa/tuple.hh @@ -22,12 +22,10 @@ template struct TupleSize>: /* tuple element */ -namespace detail { - template - struct TupleElementBase> { - using Type = typename TupleElementBase>::Type; - }; -} +template +struct TupleElementBase> { + using Type = typename TupleElementBase>::Type; +}; /* tuple leaf */ diff --git a/octa/utility.hh b/octa/utility.hh index 6c264de..ed39f49 100644 --- a/octa/utility.hh +++ b/octa/utility.hh @@ -170,17 +170,17 @@ Pair::Type, template struct TupleSize>: IntegralConstant {}; +template +struct TupleElementBase<0, Pair> { + using Type = T; +}; + +template +struct TupleElementBase<1, Pair> { + using Type = U; +}; + namespace detail { - template - struct TupleElementBase<0, Pair> { - using Type = T; - }; - - template - struct TupleElementBase<1, Pair> { - using Type = U; - }; - template struct GetPair; template<> struct GetPair<0> {