123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #ifndef _NANXING_CHECK_OPERATOR_H_
- #define _NANXING_CHECK_OPERATOR_H_
- #include<type_traits>
- #define NANXING_TYPETRAIT_TEMPLATE_T_V_ template<typename T ,typename V =void >
- #define NANXING_TYPETRAIT_TEMPLATE_T_ template<typename T >
- #define NANXING_BASIC_OPERATOR_(Type, Op) nanxing::Op##_admit<Type>::value
- namespace nanxing{
- template<typename...>
- using void_t=void;
- NANXING_TYPETRAIT_TEMPLATE_T_V_
- struct add_admit:std::false_type{static void p(){std::cout<<"false"<<std::endl;}};
-
-
-
-
-
-
-
-
-
- NANXING_TYPETRAIT_TEMPLATE_T_
- struct add_admit<T,void_t<decltype(std::declval<T>()+std::declval<T>())>>:std::true_type{static void p(){std::cout<<"true"<<std::endl;}};
-
- NANXING_TYPETRAIT_TEMPLATE_T_V_
- struct mut_admit:std::false_type{};
- NANXING_TYPETRAIT_TEMPLATE_T_
- struct mut_admit<T,void_t<decltype(std::declval<T>()-std::declval<T>())>>:std::true_type{};
-
- NANXING_TYPETRAIT_TEMPLATE_T_V_
- struct compare_admit:std::false_type{};
- NANXING_TYPETRAIT_TEMPLATE_T_
- struct compare_admit<T,void_t<decltype(std::declval<T>()<std::declval<T>())>>:std::true_type{};
-
- NANXING_TYPETRAIT_TEMPLATE_T_V_
- struct equal_admit:std::false_type{};
- NANXING_TYPETRAIT_TEMPLATE_T_
- struct equal_admit<T,void_t<decltype(std::declval<T>()=std::declval<T>())>>:std::true_type{};
-
- NANXING_TYPETRAIT_TEMPLATE_T_V_
- struct index_admit:std::false_type{};
- NANXING_TYPETRAIT_TEMPLATE_T_
- struct index_admit<T,void_t<decltype(std::declval<T>()[0])>>:std::true_type{};
-
- NANXING_TYPETRAIT_TEMPLATE_T_V_
- struct compare_ptr_admit:std::false_type{};
- NANXING_TYPETRAIT_TEMPLATE_T_
- struct compare_ptr_admit<T,void_t<decltype(std::declval<T>()[0]==std::declval<T>()[0])>>:std::true_type{};
-
- NANXING_TYPETRAIT_TEMPLATE_T_V_
- struct equal_ptr_admit:std::false_type{};
- NANXING_TYPETRAIT_TEMPLATE_T_
- struct equal_ptr_admit<T,void_t<decltype(std::declval<T>()[0]=std::declval<T>()[0])>>:std::true_type{};
-
- NANXING_TYPETRAIT_TEMPLATE_T_V_
- struct fun_admit:std::false_type{};
- NANXING_TYPETRAIT_TEMPLATE_T_
- struct fun_admit<T,void_t<decltype(std::declval<T>()())>>:std::true_type{};
-
-
- NANXING_TYPETRAIT_TEMPLATE_T_V_
- struct copy_construct_admit:std::false_type{};
- NANXING_TYPETRAIT_TEMPLATE_T_
- struct copy_construct_admit<T,void_t<decltype(T(std::declval<T>(T)))>>:std::true_type{};
-
-
- }
- #endif
|