Skip to content

File aliases.hpp

File List > backends > cxx > include > zmbt > core > aliases.hpp

Go to the documentation of this file

#ifndef ZMBT_CORE_NS_HPP_
#define ZMBT_CORE_NS_HPP_


#include <type_traits>
#include <tuple>

#include <boost/callable_traits.hpp>
#include <boost/mp11.hpp>


#define USING_STD_TYPETRAIT(trait) template <class T> using trait = std::trait<T>;
#define USING_TYPETRAIT_V(trait) template<class T> static constexpr bool trait##_v = trait<T>::value;
#define USING_TYPETRAIT_T(trait) template<class T> using trait##_t = typename trait<T>::type;

#define USING_STD_TYPETRAIT_BINARY(trait)                                       \
template<class A, class B> using trait = std::trait<A, B>;                      \
template<class A, class B> static constexpr bool trait##_v = trait<A, B>::value;

#define USING_STD_TYPETRAIT_PROPERTY(trait)  USING_STD_TYPETRAIT(trait) USING_TYPETRAIT_V(trait)
#define USING_STD_TYPETRAIT_TRANSFORM(trait) USING_STD_TYPETRAIT(trait) USING_TYPETRAIT_T(trait)


namespace zmbt {


using namespace boost::mp11;
namespace ct = boost::callable_traits;


using std::nullptr_t;
using std::size_t;

template <class...> using void_t = void;

template<class T, T V>
using integral_constant = std::integral_constant<T, V>;

template<bool V>
using bool_constant = integral_constant<bool, V>;


template<class... T>
using tuple = std::tuple<T...>;

template< class T >
using tuple_size = std::tuple_size<T>;

template< class T >
static constexpr size_t tuple_size_v = tuple_size<T>::value;

using std::make_tuple;
using std::tie;

USING_STD_TYPETRAIT_PROPERTY(is_void)
USING_STD_TYPETRAIT_PROPERTY(is_null_pointer)
USING_STD_TYPETRAIT_PROPERTY(is_integral)
USING_STD_TYPETRAIT_PROPERTY(is_floating_point)
USING_STD_TYPETRAIT_PROPERTY(is_array)
USING_STD_TYPETRAIT_PROPERTY(is_enum)
USING_STD_TYPETRAIT_PROPERTY(is_union)
USING_STD_TYPETRAIT_PROPERTY(is_class)
USING_STD_TYPETRAIT_PROPERTY(is_function)
USING_STD_TYPETRAIT_PROPERTY(is_pointer)
USING_STD_TYPETRAIT_PROPERTY(is_lvalue_reference)
USING_STD_TYPETRAIT_PROPERTY(is_rvalue_reference)
USING_STD_TYPETRAIT_PROPERTY(is_member_object_pointer)
USING_STD_TYPETRAIT_PROPERTY(is_member_function_pointer)
USING_STD_TYPETRAIT_PROPERTY(is_fundamental)
USING_STD_TYPETRAIT_PROPERTY(is_arithmetic)
USING_STD_TYPETRAIT_PROPERTY(is_scalar)
USING_STD_TYPETRAIT_PROPERTY(is_object)
USING_STD_TYPETRAIT_PROPERTY(is_compound)
USING_STD_TYPETRAIT_PROPERTY(is_reference)
USING_STD_TYPETRAIT_PROPERTY(is_member_pointer)
USING_STD_TYPETRAIT_PROPERTY(is_const)
USING_STD_TYPETRAIT_PROPERTY(is_volatile)
USING_STD_TYPETRAIT_PROPERTY(is_trivial)
USING_STD_TYPETRAIT_PROPERTY(is_trivially_copyable)
USING_STD_TYPETRAIT_PROPERTY(is_standard_layout)
USING_STD_TYPETRAIT_PROPERTY(is_empty)
USING_STD_TYPETRAIT_PROPERTY(is_polymorphic)
USING_STD_TYPETRAIT_PROPERTY(is_abstract)
USING_STD_TYPETRAIT_PROPERTY(is_final)
USING_STD_TYPETRAIT_PROPERTY(is_signed)
USING_STD_TYPETRAIT_PROPERTY(is_unsigned)

USING_STD_TYPETRAIT_PROPERTY(is_default_constructible)
USING_STD_TYPETRAIT_PROPERTY(is_trivially_default_constructible)
USING_STD_TYPETRAIT_PROPERTY(is_nothrow_default_constructible)

USING_STD_TYPETRAIT_PROPERTY(is_copy_constructible)
USING_STD_TYPETRAIT_PROPERTY(is_trivially_copy_constructible)
USING_STD_TYPETRAIT_PROPERTY(is_nothrow_copy_constructible)

USING_STD_TYPETRAIT_PROPERTY(is_move_constructible)
USING_STD_TYPETRAIT_PROPERTY(is_trivially_move_constructible)
USING_STD_TYPETRAIT_PROPERTY(is_nothrow_move_constructible)

USING_STD_TYPETRAIT_PROPERTY(is_destructible)
USING_STD_TYPETRAIT_PROPERTY(is_trivially_destructible)
USING_STD_TYPETRAIT_PROPERTY(is_nothrow_destructible)

USING_STD_TYPETRAIT_PROPERTY(has_virtual_destructor)

USING_STD_TYPETRAIT_PROPERTY(is_copy_assignable)
USING_STD_TYPETRAIT_PROPERTY(is_trivially_copy_assignable)
USING_STD_TYPETRAIT_PROPERTY(is_nothrow_copy_assignable)
USING_STD_TYPETRAIT_PROPERTY(is_move_assignable)
USING_STD_TYPETRAIT_PROPERTY(is_trivially_move_assignable)
USING_STD_TYPETRAIT_PROPERTY(is_nothrow_move_assignable)


USING_STD_TYPETRAIT_BINARY(is_same)
USING_STD_TYPETRAIT_BINARY(is_base_of)
USING_STD_TYPETRAIT_BINARY(is_convertible)

USING_STD_TYPETRAIT_BINARY(is_assignable)
USING_STD_TYPETRAIT_BINARY(is_trivially_assignable)
USING_STD_TYPETRAIT_BINARY(is_nothrow_assignable)


USING_STD_TYPETRAIT_TRANSFORM(remove_cv)
USING_STD_TYPETRAIT_TRANSFORM(remove_const)
USING_STD_TYPETRAIT_TRANSFORM(remove_volatile)
USING_STD_TYPETRAIT_TRANSFORM(add_cv)
USING_STD_TYPETRAIT_TRANSFORM(add_const)
USING_STD_TYPETRAIT_TRANSFORM(add_volatile)
USING_STD_TYPETRAIT_TRANSFORM(remove_reference)
USING_STD_TYPETRAIT_TRANSFORM(add_lvalue_reference)
USING_STD_TYPETRAIT_TRANSFORM(add_rvalue_reference)
USING_STD_TYPETRAIT_TRANSFORM(remove_pointer)
USING_STD_TYPETRAIT_TRANSFORM(add_pointer)
USING_STD_TYPETRAIT_TRANSFORM(make_signed)
USING_STD_TYPETRAIT_TRANSFORM(make_unsigned)

USING_STD_TYPETRAIT_TRANSFORM(underlying_type)

USING_STD_TYPETRAIT_TRANSFORM(decay)


template <class T, class... Args>
using is_constructible = std::is_constructible<T, Args...>;

template <class T, class... Args>
using is_trivially_constructible = std::is_trivially_constructible<T, Args...>;

template <class T, class... Args>
using is_nothrow_constructible = std::is_nothrow_constructible<T, Args...>;


template <class T>
using remove_cvref_t = remove_cv_t<remove_reference_t<T>>;

template <class T>
using remove_cvptr_t = remove_cv_t<remove_pointer_t<T>>;


template< bool B, class T = void >
using enable_if = std::enable_if<B, T>;

template< bool B, class T = void >
using enable_if_t = typename enable_if<B, T>::type;

template<bool B, class T, class F>
using conditional = std::conditional<B, T, F>;

template<bool B, class T, class F>
using conditional_t = typename conditional<B, T, F>::type;

template<class... T>
using common_type = std::common_type<T...>;

template<class... T>
using common_type_t = typename common_type<T...>::type;




// rank
// extent
// remove_extent
// remove_all_extents

}

#endif