realroot_doc 0.1.1
|
00001 #ifndef realroot_ARITHM_TRAITS_ISFIELD_H 00002 #define realroot_ARITHM_TRAITS_ISFIELD_H 00003 00004 #include <realroot/texp_kernelof.hpp> 00005 00006 //====================================================================== 00007 namespace mmx { 00008 //====================================================================== 00009 00010 namespace texp { 00011 00012 template<typename X> 00013 struct isfield_ { typedef false_t T; }; 00014 00015 template<> struct isfield_<float> { typedef true_t T; }; 00016 template<> struct isfield_<double> { typedef true_t T; }; 00017 template<> struct isfield_<long double> { typedef true_t T; }; 00018 00019 template<typename K, typename X> 00020 struct kernel_isfield { typedef true_t T; }; 00021 template<typename K> 00022 struct kernel_isfield< K, typename K::integer > { typedef false_t T; }; 00023 template<typename X> 00024 struct kernel_isfield<null_t,X> { typedef typename isfield_<X>::T T; }; 00025 00026 template<typename X> 00027 struct isfield 00028 { 00029 typedef typename ucstref<X>::T _X; 00030 typedef typename kernel_isfield< typename kernelof<_X>::T, _X >::T T; 00031 }; 00032 00033 }; 00034 00035 //====================================================================== 00036 } // namespace mmx 00037 //====================================================================== 00038 00039 #endif