Rodin::Utility namespace

Module containing general purpose and language support utility classes.

Classes

template<class T>
struct BottomTemplate
Metafunction to extract the innermost (bottom) type from nested templates.
template<template<class> class T, class S>
struct BottomTemplate<T<S>>
Specialization for single-parameter template instantiations.
template<class From, class To>
class Cast
Template for defining type conversion operations.
template<class T, T Value_, class ... Args>
struct DependentValue
Creates a type-dependent compile-time constant value.
template<class ...>
struct Extract
Template metafunction for extracting types from tuple structures.
template<class T, class ... Ts>
struct Extract<Tuple<T, Ts...>>
Specialization of Extract for Tuple types.
template<typename T, typename = void>
struct HasTypeMember
Type trait to detect if a type has a nested Type member.
template<class T>
struct HasTypeMember<T, std::void_t<typename T::Type>>
Specialization for types that have a nested Type member.
template<typename T, typename = void>
struct HasValueMember
Type trait to detect if a type has a nested Value member type.
template<class T>
struct HasValueMember<T, std::void_t<typename T::Value>>
Specialization for types that have a nested Value member type.
template<typename T, T... Is>
class IntegerSequence
Represents a compile-time sequence of integers.
template<typename ...>
struct IsOneOf
Type trait to check if a type is one of a specified list of types.
template<typename F, typename S, typename ... T>
struct IsOneOf<F, S, T...>
Specialization for non-empty type lists.
template<class Test, template<class...> class Ref>
struct IsSpecialization
Type trait to check if a type is a specialization of a given template.
template<template<class...> class Ref, class... Args>
struct IsSpecialization<Ref<Args...>, Ref>
Specialization for types that are specializations of the reference template.
template<class T>
struct Make
Factory template for perfect forwarding construction.
template<typename T>
class OptionalReference
A wrapper providing optional reference semantics.
template<class... Ts>
struct Overloaded
Helper type for creating overloaded function objects from lambdas.
template<class ... Params>
class ParameterPack
Template metaprogramming utilities for parameter packs.
template<class ...>
struct Product
Metafunction to compute the Cartesian product of two Tuple type-lists.
template<class ... Gs>
struct Product<Tuple<Gs...>, Tuple<>>
Specialization for empty second Tuple.
template<class H, class ... Gs>
struct Product<Tuple<H>, Tuple<Gs...>>
Specialization for Tuple with exactly one element.
template<class H1, class H2, class ... Hs, class ... Gs>
struct Product<Tuple<H1, H2, Hs...>, Tuple<Gs...>>
Specialization for Tuple with at least two elements (H1, H2, Hs…).
template<class ... Gs>
struct Product<Tuple<>, Tuple<Gs...>>
Specialization for empty first Tuple.
template<size_t N, class T>
struct Repeat
Metafunction to create a Tuple with N repetitions of type T.
template<class T>
struct Repeat<0, T>
Specialization for N = 0.
template<class T>
struct Repeat<1, T>
Specialization for N = 1.
template<class T>
struct UnwrapRefDecay
Combines decay and reference unwrapping.
template<class T>
struct UnwrapReference
Metafunction to unwrap std::reference_wrapper types.
template<class U>
struct UnwrapReference<std::reference_wrapper<U>>
Specialization for std::reference_wrapper.
template<class ...>
class Wrap
Metafunction to wrap all types in a Tuple with an external template.
template<class ... Ts>
class Wrap<Tuple<Ts...>>
Specialization for Tuple types.
template<class ...>
struct Zip
Metafunction to combine two Tuples element-wise using a binary template.
template<class ... Ts, class ... Gs>
struct Zip<Tuple<Ts...>, Tuple<Gs...>>
Specialization for two Tuples.