ZeroErr
Loading...
Searching...
No Matches
typetraits.h File Reference
#include "zeroerr/internal/config.h"
#include "zeroerr/string.h"
#include <tuple>
#include <type_traits>
#include <memory>
#include <cstddef>
#include <utility>
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::rank< N >
 rank is a helper class for Printer to define the priority of overloaded functions. More...
struct  zeroerr::rank< 0 >
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_like< T, typename >
struct  zeroerr::detail::is_string_like< T, void_t< typename T::traits_type::char_type, decltype(std::declval< const T & >().data()), decltype(std::declval< const T & >().size())> >
struct  zeroerr::detail::is_string_like< zeroerr::String >
struct  zeroerr::detail::is_string< T >
struct  zeroerr::detail::is_complex< T, typename >
struct  zeroerr::detail::is_complex< T, void_t< decltype(std::declval< const T & >().real()), decltype(std::declval< const T & >().imag())> >
struct  zeroerr::detail::is_pointer_like< T, typename >
struct  zeroerr::detail::is_pointer_like< T, void_t< decltype(std::declval< const T & >().get())> >
struct  zeroerr::detail::is_weak_pointer_like< T, typename >
struct  zeroerr::detail::is_weak_pointer_like< T, void_t< decltype(std::declval< const T & >().lock())> >
struct  zeroerr::detail::has_tuple_get< T, Sequence, typename >
struct  zeroerr::detail::has_tuple_get< T, seq< I... >, void_t< decltype(tuple_get< I >(std::declval< const T & >()))... > >
struct  zeroerr::detail::is_tuple_like< T, typename >
struct  zeroerr::detail::is_tuple_like< T, void_t< decltype(std::tuple_size< T >::value)> >
struct  zeroerr::detail::is_complete_type< T, typename >
struct  zeroerr::detail::is_complete_type< T, decltype(void(sizeof(T)))>
struct  zeroerr::detail::is_indexable_non_pointer< T, typename >
struct  zeroerr::detail::is_indexable_non_pointer< T, void_t< decltype(std::declval< const T & >()[0])> >
struct  zeroerr::detail::is_array_dispatch< T, bool >
struct  zeroerr::detail::is_array_dispatch< T, true >
struct  zeroerr::detail::is_array< T >
struct  zeroerr::detail::is_modifiable< T, typename >
struct  zeroerr::detail::is_modifiable< T, void_t< decltype(T().begin(), T().end(), T().size(), T().insert(T().end(), std::declval< typename T::value_type >()), T().erase(T().begin()),(void) 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

namespace  zeroerr
namespace  zeroerr::detail

Macros

#define _LIBCPP_REMOVE_TRANSITIVE_INCLUDES
#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_ENUM   std::is_enum<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 || std::is_same<T, std::nullptr_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<zeroerr::StringBuffer, T>::value
#define ZEROERR_IS_ARRAY   detail::is_array<T>::value
#define ZEROERR_IS_COMPLEX   detail::is_complex<T>::value
#define ZEROERR_IS_BOOL   std::is_same<T, bool>::value
#define ZEROERR_IS_AUTOPTR   detail::is_pointer_like<T>::value
#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<const T&>())>
template<typename T>
using zeroerr::detail::has_begin_end
template<typename T>
using zeroerr::detail::has_begin_end_find_insert
template<typename T>
using zeroerr::detail::has_pair_type
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<std::size_t I>
void zeroerr::detail::get ()=delete
template<std::size_t I, typename T>
auto zeroerr::detail::tuple_get (T &&value) -> decltype(get< I >(std::forward< T >(value)))
template<typename F, typename T>
void zeroerr::detail::visit_at (T &tup, size_t idx, F &&fun)
template<typename F, typename T1, typename T2>
void zeroerr::detail::visit2_at (T1 &tup1, T2 &tup2, size_t idx, F &&fun)

Macro Definition Documentation

◆ _LIBCPP_REMOVE_TRANSITIVE_INCLUDES

#define _LIBCPP_REMOVE_TRANSITIVE_INCLUDES

◆ 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   detail::is_pointer_like<T>::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_complex<T>::value

◆ ZEROERR_IS_CONTAINER

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

◆ ZEROERR_IS_ENUM

#define ZEROERR_IS_ENUM   std::is_enum<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 || std::is_same<T, std::nullptr_t>::value)

◆ ZEROERR_IS_STREAMABLE

#define ZEROERR_IS_STREAMABLE   detail::is_streamable<zeroerr::StringBuffer, 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