userver: userver/utils/meta.hpp File Reference
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
meta.hpp File Reference

Metaprogramming, template variables and concepts. More...

#include <iosfwd>
#include <iterator>
#include <optional>
#include <type_traits>
#include <vector>
#include <userver/utils/meta_light.hpp>
+ Include dependency graph for meta.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Typedefs

template<typename T >
using meta::MapKeyType = DetectedType< impl::KeyType, T >
 
template<typename T >
using meta::MapValueType = DetectedType< impl::MappedType, T >
 
template<typename T >
using meta::RangeValueType = DetectedType< impl::RangeValueType, T >
 

Functions

template<typename T >
auto meta::Inserter (T &container)
 Returns default inserter for a container.
 

Variables

template<typename T >
constexpr bool meta::kIsVector = kIsInstantiationOf<std::vector, T>
 
template<typename T >
constexpr bool meta::kIsRange = kIsDetected<impl::IsRange, T>
 
template<typename T >
constexpr bool meta::kIsMap
 Returns true if T is an ordered or unordered map or multimap.
 
template<typename T >
constexpr bool meta::kIsUniqueMap
 Returns true if T is a map (but not a multimap!)
 
template<typename T >
constexpr bool meta::kIsRecursiveRange
 
template<typename T >
constexpr bool meta::kIsOptional = kIsInstantiationOf<std::optional, T>
 
template<typename T >
constexpr bool meta::kIsOstreamWritable
 
template<typename T , typename U = T>
constexpr bool meta::kIsEqualityComparable
 
template<typename T >
constexpr bool meta::kIsStdHashable
 
template<typename T >
constexpr bool meta::kIsSizable = kIsDetected<impl::IsSizable, T>
 Check if std::size is applicable to container.
 
template<typename T >
constexpr bool meta::kIsReservable = kIsDetected<impl::ReserveResult, T>
 Check if a container has reserve
 
template<typename T >
constexpr bool meta::kIsPushBackable = kIsDetected<impl::PushBackResult, T>
 Check if a container has 'push_back'.
 
template<typename T >
constexpr bool meta::kIsFixedSizeContainer
 Check if a container has fixed size (e.g. std::array)
 

Detailed Description

Metaprogramming, template variables and concepts.

Definition in file meta.hpp.

Typedef Documentation

◆ MapKeyType

template<typename T >
using meta::MapKeyType = typedef DetectedType<impl::KeyType, T>

Definition at line 110 of file meta.hpp.

◆ MapValueType

template<typename T >
using meta::MapValueType = typedef DetectedType<impl::MappedType, T>

Definition at line 113 of file meta.hpp.

◆ RangeValueType

template<typename T >
using meta::RangeValueType = typedef DetectedType<impl::RangeValueType, T>

Definition at line 116 of file meta.hpp.

Function Documentation

◆ Inserter()

template<typename T >
auto meta::Inserter ( T &  container)

Returns default inserter for a container.

Definition at line 157 of file meta.hpp.

Variable Documentation

◆ kIsEqualityComparable

template<typename T , typename U = T>
constexpr bool meta::kIsEqualityComparable
inlineconstexpr
Initial value:
=
std::is_same_v<DetectedType<impl::EqualityComparisonResult, T, U>, bool>

Definition at line 130 of file meta.hpp.

◆ kIsFixedSizeContainer

template<typename T >
constexpr bool meta::kIsFixedSizeContainer
inlineconstexpr
Initial value:
=
impl::IsFixedSizeContainer<T>::value

Check if a container has fixed size (e.g. std::array)

Definition at line 152 of file meta.hpp.

◆ kIsMap

template<typename T >
constexpr bool meta::kIsMap
inlineconstexpr
Initial value:

Returns true if T is an ordered or unordered map or multimap.

Definition at line 99 of file meta.hpp.

◆ kIsOptional

template<typename T >
constexpr bool meta::kIsOptional = kIsInstantiationOf<std::optional, T>
inlineconstexpr

Definition at line 123 of file meta.hpp.

◆ kIsOstreamWritable

template<typename T >
constexpr bool meta::kIsOstreamWritable
inlineconstexpr
Initial value:
=
std::is_same_v<DetectedType<impl::OstreamWriteResult, T>, std::ostream&>

Definition at line 126 of file meta.hpp.

◆ kIsPushBackable

template<typename T >
constexpr bool meta::kIsPushBackable = kIsDetected<impl::PushBackResult, T>
inlineconstexpr

Check if a container has 'push_back'.

Definition at line 148 of file meta.hpp.

◆ kIsRange

template<typename T >
constexpr bool meta::kIsRange = kIsDetected<impl::IsRange, T>
inlineconstexpr

Definition at line 95 of file meta.hpp.

◆ kIsRecursiveRange

template<typename T >
constexpr bool meta::kIsRecursiveRange
inlineconstexpr
Initial value:
=
std::is_same_v<DetectedType<impl::RangeValueType, T>, T>

Definition at line 119 of file meta.hpp.

◆ kIsReservable

template<typename T >
constexpr bool meta::kIsReservable = kIsDetected<impl::ReserveResult, T>
inlineconstexpr

Check if a container has reserve

Definition at line 144 of file meta.hpp.

◆ kIsSizable

template<typename T >
constexpr bool meta::kIsSizable = kIsDetected<impl::IsSizable, T>
inlineconstexpr

Check if std::size is applicable to container.

Definition at line 140 of file meta.hpp.

◆ kIsStdHashable

template<typename T >
constexpr bool meta::kIsStdHashable
inlineconstexpr
Initial value:
=
std::is_same_v<DetectedType<impl::StdHashResult, T>, std::size_t> &&
kIsEqualityComparable<T>

Definition at line 134 of file meta.hpp.

◆ kIsUniqueMap

template<typename T >
constexpr bool meta::kIsUniqueMap
inlineconstexpr
Initial value:
=
kIsMap<T> && kIsDetected<impl::SubscriptOperatorResult,
T>

Returns true if T is a map (but not a multimap!)

Definition at line 105 of file meta.hpp.

◆ kIsVector

template<typename T >
constexpr bool meta::kIsVector = kIsInstantiationOf<std::vector, T>
inlineconstexpr

Definition at line 92 of file meta.hpp.