00001 #ifndef realroot_ARITHM_TRAITS_SUP_H
00002 #define realroot_ARITHM_TRAITS_SUP_H
00003
00004 #define SUP_T(A,B) typename texp::sup<A,B>::T
00005
00006 #include "realroot/texp_issubsetof.hpp"
00007
00008 namespace mmx {
00009
00010 namespace texp {
00011
00012 template<typename X, typename Y>
00013 struct sup_
00014 {
00015 typedef X T;
00016 };
00017
00018
00019 template<class X,class Y> struct sup;
00020
00021 template<typename X, typename Y>
00022 struct sup
00023 {
00024 typedef typename ucstref<X>::T _X;
00025 typedef typename ucstref<Y>::T _Y;
00026 typedef typename issubsetof< X, Y >::T TA;
00027 typedef typename issubsetof< Y, X >::T TB;
00028 typedef typename tselect< TA, Y, null_t >::T A;
00029 typedef typename tselect< TB, X, null_t >::T B;
00030 typedef typename sup_<_X,_Y>::T C;
00031 typedef typename sfirstnn< C, A, B >::T T;
00032 };
00033
00034 }
00035
00036 }
00037
00038 #endif