join_refines.h

Back to Orphans

pastel/sys/concept/

// Description: Joins Refines<...> structures together.

#ifndef PASTELSYS_JOIN_REFINES_H
#define PASTELSYS_JOIN_REFINES_H

#include "pastel/sys/concept/refines.h"
#include "pastel/sys/type_traits/fold.h"

namespace Pastel
{

    namespace JoinRefines_
    {

        template <
            typename A_Refines,
            typename B_Refines>
        struct JoinRefines_F_;

        template <
            typename... A_ConceptSet,
            typename... B_ConceptSet>
        struct JoinRefines_F_<
            Refines<A_ConceptSet...>, 
            Refines<B_ConceptSet...>>
        : Identity_F<
            Refines<
                A_ConceptSet..., 
                B_ConceptSet...
            >
        >
        {};

    }

    template <typename... RefinesSet>
    struct JoinRefines_F
    : Fold_F<JoinRefines_::JoinRefines_F_, Refines<>, RefinesSet...>
    {};

    template <typename... RefinesSet>
    using JoinRefines = 
        typename JoinRefines_F<RefinesSet...>::type;

}

#endif