Github   Telegram
Loading...
Searching...
No Matches
Typedefs | Functions | Variables
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. More...
 

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. More...
 
template<typename T >
constexpr bool meta::kIsUniqueMap
 Returns true if T is a map (but not a multimap!) More...
 
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. More...
 
template<typename T >
constexpr bool meta::kIsReservable = kIsDetected<impl::ReserveResult, T>
 Check if a container has reserve More...
 
template<typename T >
constexpr bool meta::kIsPushBackable = kIsDetected<impl::PushBackResult, T>
 Check if a container has 'push_back'. More...
 
template<typename T >
constexpr bool meta::kIsFixedSizeContainer
 Check if a container has fixed size (e.g. std::array) More...
 

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 109 of file meta.hpp.

◆ MapValueType

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

Definition at line 112 of file meta.hpp.

◆ RangeValueType

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

Definition at line 115 of file meta.hpp.

Function Documentation

◆ Inserter()

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

Returns default inserter for a container.

Definition at line 156 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 129 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 151 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 98 of file meta.hpp.

◆ kIsOptional

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

Definition at line 122 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 125 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 147 of file meta.hpp.

◆ kIsRange

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

Definition at line 94 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 118 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 143 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 139 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 133 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 104 of file meta.hpp.

◆ kIsVector

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

Definition at line 91 of file meta.hpp.