| | #ifndef METAL_VALUE_SAME_HPP |
| | #define METAL_VALUE_SAME_HPP |
| |
|
| | #include "../config.hpp" |
| |
|
| | namespace metal { |
| | |
| | namespace detail { |
| | template <class... vals> |
| | struct _same; |
| | } |
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | template <class... vals> |
| | using same = typename detail::_same<vals...>::type; |
| | } |
| |
|
| | #include "../number/number.hpp" |
| | #include "../value/value.hpp" |
| |
|
| | namespace metal { |
| | |
| | namespace detail { |
| | template <class...> |
| | struct _same_impl : false_ { |
| | }; |
| |
|
| | template <template <class> class... _, class val> |
| | struct _same_impl<_<val>...> : true_ { |
| | }; |
| |
|
| | template <class... vals> |
| | struct _same : _same_impl<maybe<vals>...> { |
| | }; |
| |
|
| | template <class x, class y> |
| | struct _same<x, y> : false_ { |
| | }; |
| |
|
| | template <class x> |
| | struct _same<x, x> : true_ { |
| | }; |
| |
|
| | template <class x> |
| | struct _same<x> : true_ { |
| | }; |
| |
|
| | template <> |
| | struct _same<> : true_ { |
| | }; |
| | } |
| | |
| | } |
| |
|
| | #endif |
| |
|