#ifndef _EINA_TYPE_TRAITS_HH #define _EINA_TYPE_TRAITS_HH #include #include #include /** * @addtogroup Eina_Cxx_Data_Types_Group * * @{ */ namespace efl { namespace eina { /** * @internal * * @{ */ using std::enable_if; using std::is_integral; using std::is_pod; using std::is_const; using std::remove_cv; using std::true_type; using std::false_type; using std::remove_pointer; using std::remove_reference; template struct indirect_is_contiguous_iterator : false_type {}; template <> struct indirect_is_contiguous_iterator::iterator> : std::true_type {}; template <> struct indirect_is_contiguous_iterator::const_iterator> : std::true_type {}; template struct is_contiguous_iterator : indirect_is_contiguous_iterator {}; template <> struct is_contiguous_iterator : true_type {}; template <> struct is_contiguous_iterator : true_type {}; template struct if_c { typedef T type; }; template struct if_c { typedef F type; }; template struct if_ : if_c { }; template struct container_value_type { typedef typename std::conditional< std::is_void::value , std::add_pointer, std::remove_reference>::type::type type; }; template struct nonconst_container_value_type { typedef typename std::conditional< std::is_void::value , std::add_pointer, std::remove_cv::type>>::type::type type; }; /** * @} */ } } /** * @} */ #endif