ZeroErr
typetraits.h File Reference
#include "zeroerr/internal/config.h"
#include <ostream>
#include <sstream>
#include <string>
#include <tuple>
#include <type_traits>
Include dependency graph for typetraits.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  zeroerr::detail::always_false< T >
 
struct  zeroerr::detail::always_true< T >
 
struct  zeroerr::detail::seq<... >
 
struct  zeroerr::detail::gen_seq< N, Is >
 
struct  zeroerr::detail::gen_seq< 0, Is... >
 
struct  zeroerr::detail::is_specialization< Test, Ref >
 
struct  zeroerr::detail::is_specialization< Ref< Args... >, Ref >
 
struct  zeroerr::detail::is_streamable< S, T, typename >
 
struct  zeroerr::detail::is_streamable< S, T, has_stream_operator< S, T > >
 
struct  zeroerr::detail::is_container< T, typename >
 
struct  zeroerr::detail::is_container< T, has_begin_end< T > >
 
struct  zeroerr::detail::is_associative_container< T, typename >
 
struct  zeroerr::detail::is_associative_container< T, has_begin_end_find_insert< T > >
 
struct  zeroerr::detail::is_string< T >
 
struct  zeroerr::detail::is_array< T, typename >
 
struct  zeroerr::detail::is_array< T, void_t< decltype(std::declval< T >()[0])> >
 
struct  zeroerr::detail::ele_type_is_pair< T, typename >
 
struct  zeroerr::detail::ele_type_is_pair< T, has_pair_type< T > >
 
struct  zeroerr::detail::to_store_type< T, V >
 
struct  zeroerr::detail::to_store_type< const char * >
 
struct  zeroerr::detail::to_store_type< const char(&)[]>
 
struct  zeroerr::detail::to_store_type< T &, is_not_array< T > >
 
struct  zeroerr::detail::to_store_type< T && >
 
struct  zeroerr::detail::visit_impl< I >
 
struct  zeroerr::detail::visit_impl< 0 >
 
struct  zeroerr::detail::visit2_impl< I >
 
struct  zeroerr::detail::visit2_impl< 0 >
 

Namespaces

 zeroerr
 
 zeroerr::detail
 

Macros

#define ZEROERR_STRING_VIEW   0
 
#define ZEROERR_ENABLE_IF(x)
 
#define ZEROERR_IS_INT   std::is_integral<T>::value
 
#define ZEROERR_IS_FLOAT   std::is_floating_point<T>::value
 
#define ZEROERR_IS_CONTAINER   detail::is_container<T>::value
 
#define ZEROERR_IS_STRING   detail::is_string<T>::value
 
#define ZEROERR_IS_POINTER   std::is_pointer<T>::value
 
#define ZEROERR_IS_CHAR   std::is_same<T, char>::value
 
#define ZEROERR_IS_WCHAR   std::is_same<T, wchar_t>::value
 
#define ZEROERR_IS_CLASS   std::is_class<T>::value
 
#define ZEROERR_IS_STREAMABLE   detail::is_streamable<std::ostream, T>::value
 
#define ZEROERR_IS_ARRAY   detail::is_array<T>::value
 
#define ZEROERR_IS_COMPLEX   detail::is_specialization<T, std::complex>::value
 
#define ZEROERR_IS_BOOL   std::is_same<T, bool>::value
 
#define ZEROERR_IS_AUTOPTR
 
#define ZEROERR_IS_MAP   detail::ele_type_is_pair<T>::value
 
#define ZEROERR_IS_POD   std::is_standard_layout<T>::value
 
#define ZEROERR_IS_EXT   detail::has_extension<T>::value
 

Typedefs

template<typename... Ts>
using zeroerr::detail::void_t = void
 
template<typename S , typename T >
using zeroerr::detail::has_stream_operator = void_t< decltype(std::declval< S & >()<< std::declval< T >())>
 
template<typename T >
using zeroerr::detail::has_begin_end = void_t< decltype(std::declval< T >().begin()), decltype(std::declval< T >().end())>
 
template<typename T >
using zeroerr::detail::has_begin_end_find_insert = void_t< decltype(std::declval< T >().begin()), decltype(std::declval< T >().end()), decltype(std::declval< T >().find(std::declval< typename T::key_type >())), decltype(std::declval< T >().insert(std::declval< typename T::value_type >()))>
 
template<typename T >
using zeroerr::detail::has_pair_type = void_t< typename T::value_type, decltype(std::declval< typename T::value_type >().first), decltype(std::declval< typename T::value_type >().second)>
 
template<typename T >
using zeroerr::detail::is_not_array = typename std::enable_if<!std::is_array< T >::value >::type
 
template<typename T >
using zeroerr::detail::to_store_type_t = typename to_store_type< T >::type
 

Functions

template<typename F , typename... Ts>
void zeroerr::detail::visit_at (const std::tuple< Ts... > &tup, size_t idx, F &&fun)
 
template<typename F , typename... Ts>
void zeroerr::detail::visit_at (std::tuple< Ts... > &tup, size_t idx, F &&fun)
 
template<typename F , typename... Ts, typename... T2s>
void zeroerr::detail::visit2_at (const std::tuple< Ts... > &tup1, const std::tuple< T2s... > &tup2, size_t idx, F &&fun)
 
template<typename F , typename... Ts, typename... T2s>
void zeroerr::detail::visit2_at (std::tuple< Ts... > &tup1, std::tuple< T2s... > &tup2, size_t idx, F &&fun)
 
template<typename F , typename... Ts, typename... T2s>
void zeroerr::detail::visit2_at (const std::tuple< Ts... > &tup1, std::tuple< T2s... > &tup2, size_t idx, F &&fun)
 
template<typename F , typename... Ts, typename... T2s>
void zeroerr::detail::visit2_at (std::tuple< Ts... > &tup1, const std::tuple< T2s... > &tup2, size_t idx, F &&fun)
 

Macro Definition Documentation

◆ ZEROERR_ENABLE_IF

#define ZEROERR_ENABLE_IF (   x)
Value:
template <typename T> \
typename std::enable_if<x, void>::type

◆ ZEROERR_IS_ARRAY

#define ZEROERR_IS_ARRAY   detail::is_array<T>::value

◆ ZEROERR_IS_AUTOPTR

#define ZEROERR_IS_AUTOPTR
Value:
(detail::is_specialization<T, std::unique_ptr>::value || \
detail::is_specialization<T, std::shared_ptr>::value || \
detail::is_specialization<T, std::weak_ptr>::value)

◆ ZEROERR_IS_BOOL

#define ZEROERR_IS_BOOL   std::is_same<T, bool>::value

◆ ZEROERR_IS_CHAR

#define ZEROERR_IS_CHAR   std::is_same<T, char>::value

◆ ZEROERR_IS_CLASS

#define ZEROERR_IS_CLASS   std::is_class<T>::value

◆ ZEROERR_IS_COMPLEX

#define ZEROERR_IS_COMPLEX   detail::is_specialization<T, std::complex>::value

◆ ZEROERR_IS_CONTAINER

#define ZEROERR_IS_CONTAINER   detail::is_container<T>::value

◆ ZEROERR_IS_EXT

#define ZEROERR_IS_EXT   detail::has_extension<T>::value

◆ ZEROERR_IS_FLOAT

#define ZEROERR_IS_FLOAT   std::is_floating_point<T>::value

◆ ZEROERR_IS_INT

#define ZEROERR_IS_INT   std::is_integral<T>::value

◆ ZEROERR_IS_MAP

#define ZEROERR_IS_MAP   detail::ele_type_is_pair<T>::value

◆ ZEROERR_IS_POD

#define ZEROERR_IS_POD   std::is_standard_layout<T>::value

◆ ZEROERR_IS_POINTER

#define ZEROERR_IS_POINTER   std::is_pointer<T>::value

◆ ZEROERR_IS_STREAMABLE

#define ZEROERR_IS_STREAMABLE   detail::is_streamable<std::ostream, T>::value

◆ ZEROERR_IS_STRING

#define ZEROERR_IS_STRING   detail::is_string<T>::value

◆ ZEROERR_IS_WCHAR

#define ZEROERR_IS_WCHAR   std::is_same<T, wchar_t>::value

◆ ZEROERR_STRING_VIEW

#define ZEROERR_STRING_VIEW   0