All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | Namespaces | Typedefs | Functions | Variables
MetaUtils.h File Reference

Basic C++ metaprogramming utilities. More...

#include <array>
#include <string>
#include <string_view>
#include <memory>
#include <functional>
#include <type_traits>

Go to the source code of this file.

Classes

struct  util::details::ClassNameStaticDumper< T >
 Implementation detail of staticDumpClassName(). More...
 
struct  util::self_type< T >
 Trait returning the very same type as in the template argument. More...
 
struct  util::always_false_type< typename >
 A std::false_type with a template argument. More...
 
struct  util::always_true_type< typename >
 A std::true_type with a template argument. More...
 
struct  util::find_next_type< T, StartFrom, Types >
 Trait: index of the first occurrence of T among the specified Types, starting from the one with index StartFrom. More...
 
struct  util::is_any_of< T, Types >
 Trait: whether T is among the specified Types. More...
 
struct  util::is_instance_of< Template, T >
 Trait describing whether T is a template instance of Template. More...
 
struct  util::is_STLarray< T >
 Identifies whether the specified type is a STL array. More...
 
struct  util::is_character_type< T >
 Trait: whether type T is a character type. More...
 
struct  util::is_string_type< T >
 Trait: whether type T is a character string type. More...
 
struct  util::is_basic_string_type< T >
 Trait: whether type T is a STL string type. More...
 
struct  util::is_basic_string_view_type< T >
 Trait: whether type T is a std::string_view type. More...
 
struct  util::with_const_as< Base, Key >
 Trait with type Base, plus the constantness as in Key. More...
 
struct  util::strip_referenceness_type< T >
 Trait with type T stripped of all known reference types. More...
 
struct  util::reference_addresser
 Functor applying the proper referenced_address() function. More...
 
struct  util::lvalue_reference_into_wrapper_type< T >
 Trait with type T into std::reference_wrapper if reference. More...
 
struct  util::details::find_type_impl< Index, Skip, T, Types >
 
struct  util::details::find_type_impl< Index, Skip, T, Type, Others...>
 
struct  util::details::find_type_impl< Index, Skip, T >
 
struct  util::details::is_character_type_impl< T, typename >
 
struct  util::details::is_string_type_impl< T, typename >
 
struct  util::details::is_string_type_impl< T, std::enable_if_t< is_character_type_impl< typename T::value_type >::value > >
 
struct  util::details::is_string_type_impl< T, std::enable_if_t< std::is_pointer_v< std::decay_t< T > > &&is_character_type_impl< std::remove_pointer_t< std::decay_t< T > > >::value > >
 
struct  util::details::is_string_type_impl< T, std::enable_if_t< std::is_array_v< std::decay_t< T > > &&is_character_type_impl< std::remove_extent_t< std::decay_t< T > > >::value > >
 
struct  util::details::is_basic_string_type_impl< T >
 
struct  util::details::is_basic_string_type_impl< std::basic_string< Args...> >
 
struct  util::details::is_basic_string_view_type_impl< T >
 
struct  util::details::is_basic_string_view_type_impl< std::basic_string_view< Args...> >
 
struct  util::details::ClassNameStaticDumper< T >
 Implementation detail of staticDumpClassName(). More...
 
struct  util::details::with_const_as_impl< Base, typename, typename >
 
struct  util::details::with_const_as_impl< Base, Key, std::enable_if_t< std::is_const_v< Key > > >
 
struct  util::details::with_const_as_dispatch_ref< Base, Key, typename >
 
struct  util::details::with_const_as_dispatch_ref< Base, Key, std::enable_if_t< std::is_lvalue_reference_v< Base > > >
 
struct  util::details::with_const_as_dispatch_ref< Base, Key, std::enable_if_t< std::is_rvalue_reference_v< Base > > >
 
struct  util::details::with_const_as_dispatch_keyref< Base, Key >
 
struct  util::details::with_const_as_dispatcher< Base, Key >
 
struct  util::details::is_instance_of_impl< Template, T >
 
struct  util::details::is_instance_of_impl< Template, Template< Args...> >
 
struct  util::details::strip_referenceness_type_impl< T >
 
struct  util::details::strip_referenceness_type_impl_wrapref< T, typename >
 
struct  util::details::strip_referenceness_type_impl_wrapref< T, std::enable_if_t< util::is_reference_wrapper_v< std::remove_cv_t< T > > > >
 
struct  util::details::strip_referenceness_type_impl_ref< T >
 
struct  util::details::strip_referenceness_type_impl_ref< T & >
 
struct  util::details::strip_referenceness_type_impl_ref< T && >
 
struct  util::details::strip_referenceness_type_impl< T >
 
struct  util::details::referenced_address_impl< T, typename >
 
struct  util::details::referenced_address_impl< T, std::enable_if_t< util::is_reference_wrapper_v< T > > >
 
struct  util::details::lvalue_reference_into_wrapper_type_impl_final< T >
 
struct  util::details::lvalue_reference_into_wrapper_type_impl_final< T & >
 
struct  util::details::lvalue_reference_into_wrapper_type_impl_wrapper< T, typename >
 
struct  util::details::lvalue_reference_into_wrapper_type_impl_wrapper< T, std::enable_if_t< util::is_reference_wrapper_v< T > > >
 
struct  util::details::lvalue_reference_into_wrapper_type_impl< T >
 
struct  util::is_instance_of< Template, T >
 Trait describing whether T is a template instance of Template. More...
 
struct  util::find_next_type< T, StartFrom, Types >
 Trait: index of the first occurrence of T among the specified Types, starting from the one with index StartFrom. More...
 
struct  util::is_any_of< T, Types >
 Trait: whether T is among the specified Types. More...
 
struct  util::is_character_type< T >
 Trait: whether type T is a character type. More...
 
struct  util::is_string_type< T >
 Trait: whether type T is a character string type. More...
 
struct  util::is_basic_string_type< T >
 Trait: whether type T is a STL string type. More...
 
struct  util::is_basic_string_view_type< T >
 Trait: whether type T is a std::string_view type. More...
 
struct  util::is_STLarray< T >
 Identifies whether the specified type is a STL array. More...
 
struct  util::is_STLarray< std::array< T, N > >
 
struct  util::with_const_as< Base, Key >
 Trait with type Base, plus the constantness as in Key. More...
 
struct  util::strip_referenceness_type< T >
 Trait with type T stripped of all known reference types. More...
 
struct  util::lvalue_reference_into_wrapper_type< T >
 Trait with type T into std::reference_wrapper if reference. More...
 

Namespaces

 util
 Namespace for general, non-LArSoft-specific utilities.
 
 util::details
 

Typedefs

template<typename T >
using util::self_t = typename self_type< T >::type
 The very same type as in the template argument. More...
 
using util::type_traits = std::bool_constant< Value >
 
template<typename A , typename B >
using util::is_not_same = std::negation< std::is_same< A, B >>
 The negation of std::is_same. More...
 
template<typename T , typename... Types>
using util::find_type = find_next_type< T, 0U, Types...>
 Trait: index of the first occurrence of T among the specified Types. More...
 
template<typename T >
using util::is_reference_wrapper = is_instance_of< std::reference_wrapper, T >
 Identifies whether the specified type is a std::reference_wrapper. More...
 
template<typename T >
using util::is_unique_ptr = is_instance_of< std::unique_ptr, T >
 Identifies whether the specified type is a std::unique_ptr. More...
 
template<typename Base , typename Key >
using util::with_const_as_t = typename with_const_as< Base, Key >::type
 The type Base, plus the constantness as in Key. More...
 
template<typename T >
using util::strip_referenceness_t = typename strip_referenceness_type< T >::type
 The type T stripped of all known reference types. More...
 
template<typename T >
using util::lvalue_reference_into_wrapper_t = typename lvalue_reference_into_wrapper_type< T >::type
 The type T stripped of all known reference types. More...
 

Functions

template<typename Ref >
auto util::referenced_address (Ref &&ref)
 Returns the address of the referenced object. More...
 
template<typename T >
auto util::lvalue_reference_into_wrapper (T &&obj)
 Converts a l-value reference object into a std::reference_wrapper. More...
 
template<typename T >
void util::staticDumpClassName ()
 Helper to determine the type of a variable at compilation time. More...
 
template<typename T >
void util::staticDumpClassName (T)
 

Variables

template<typename >
constexpr bool util::always_false_v = false
 A templated constant, always false. More...
 
template<typename >
constexpr bool util::always_true_v = true
 A template constant always true. More...
 
template<typename T , std::size_t StartFrom, typename... Types>
constexpr std::size_t util::find_next_type_v = find_next_type<T, StartFrom, Types...>::value
 
template<typename T , typename... Types>
constexpr std::size_t util::find_type_v = find_type<T, Types...>::value
 
template<typename T , typename... Types>
constexpr bool util::is_any_of_v = is_any_of<T, Types...>::value
 Whether T is among the specified Types (see util::is_any_of). More...
 
template<typename T , typename U >
constexpr auto util::is_same_decay_v = std::is_same_v<std::decay_t<T>, std::decay_t<U>>
 Whether T and U are the same type, after being applied std::decay. More...
 
template<template< typename...> typename Template, typename T >
constexpr bool util::is_instance_of_v = is_instance_of<Template, T>::value
 
template<typename T >
constexpr bool util::is_STLarray_v = is_STLarray<T>::value
 A constant describing whether the specified type is a STL array. More...
 
template<typename T >
constexpr bool util::is_reference_wrapper_v = is_reference_wrapper<T>::value
 A constant describing whether the specified type is a std::reference_wrapper. More...
 
template<typename T >
constexpr bool util::is_unique_ptr_v = is_unique_ptr<T>::value
 A constant describing whether the specified type is a std::unique_ptr. More...
 
template<typename T >
constexpr bool util::is_character_type_v = is_character_type<T>::value
 Whether type T is a character type (see util::is_character_type). More...
 
template<typename T >
constexpr bool util::is_string_type_v = is_string_type<T>::value
 Whether type T is a character string type (see util::is_string_type). More...
 
template<typename T >
constexpr bool util::is_basic_string_type_v = is_basic_string_type<T>::value
 
template<typename T >
constexpr bool util::is_basic_string_view_type_v = is_basic_string_view_type<T>::value
 

Detailed Description

Basic C++ metaprogramming utilities.


Author
Gianluca Petrillo (petri.nosp@m.llo@.nosp@m.fnal..nosp@m.gov)
Date
January 12, 2017

Definition in file MetaUtils.h.