26 #ifndef MLN_METAL_IS_HH
27 # define MLN_METAL_IS_HH
33 # include <mln/metal/is_a.hh>
36 # define mlc_is(T, U) mln::metal::is< T, U >
49 template <
typename T,
typename U>
52 static yes_ selector(U*
const);
53 static no_ selector(...);
63 template <
typename T,
typename U>
64 struct is : bool_<( sizeof(internal::helper_is_<T, U>::selector(internal::make_<T>::ptr()))
66 sizeof(internal::yes_) )>
70 template <
typename T,
typename U>
71 struct is< const T, const U > :
is<T, U>::eval
74 template <
typename T,
typename U>
75 struct is< T*, U* > : is<T, U>::eval
78 template <
typename T,
typename U>
79 struct is< T&, U& > : is<T, U>::eval
82 template <
typename T,
typename U>
83 struct is< T**, U** > : false_
91 #endif // ! MLN_METAL_IS_HH