4#ifndef _Stroika_Foundation_Common_TemplateUtilities_h_
5#define _Stroika_Foundation_Common_TemplateUtilities_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
12#include "Stroika/Foundation/Common/Common.h"
27 template <
typename T,
typename... ARGS>
37 template <
template <
typename...>
class Cont,
typename... Ts>
39 using type = Cont<Ts...>;
48 using is_transparent = void;
51 constexpr T&& operator() (T&& t)
const noexcept
53 return std::forward<T> (t);
59 using BaseDifferenceType_ =
decltype (T{} - T{});
118 template <
typename T,
typename Seq>
120 template <
typename T,
size_t... Is>
121 struct expander<T, index_sequence<Is...>> {
122 template <
typename E,
size_t>
124 using type = tuple<elem<T, Is>...>;
126 template <
size_t N,
class Type>
128 using type =
typename expander<Type, make_index_sequence<N>>::type;
135 template <
size_t N,
class Type>
145#include "TemplateUtilities.inl"
typename conditional_t< is_integral_v< T >, LazyType< make_unsigned_t, T >, conditional< true, T, T > >::type UnsignedOfIf
typename Private_::my_tuple< N, Type >::type RepeatedTuple_t
same_as<RepeatedTuple_t<3,int>,tuple<int,int,int>>
typename conditional_t< is_enum_v< T >, LazyType< underlying_type_t, T >, LazyType< Private_::BaseDifferenceType_, T > >::type DifferenceType
T & Immortalize(ARGS... args)
function object whose action is to map its argument, back to the same value it started with (identity...