| | #include <metal.hpp> |
| |
|
| | #include "example.hpp" |
| |
|
| | #include <memory> |
| | #include <tuple> |
| | #include <type_traits> |
| |
|
| | #if !defined(METAL_WORKAROUND) |
| |
|
| | HIDE( |
| | |
| | template<class T> |
| | using expr = T*; |
| |
|
| | using lbd = metal::lambda<expr>; |
| | |
| |
|
| | IS_SAME(metal::is_lambda<lbd>, metal::true_); |
| | ) |
| |
|
| | HIDE( |
| | |
| | template<class T> |
| | using expr = T*; |
| |
|
| | IS_SAME(metal::is_lambda<void>, metal::false_); |
| | IS_SAME(metal::is_lambda<metal::lambda<expr>>, metal::true_); |
| | IS_SAME(metal::is_lambda<metal::trait<std::is_pointer>>, metal::true_); |
| | IS_SAME(metal::is_lambda<metal::lazy<std::add_pointer>>, metal::true_); |
| | |
| | ) |
| |
|
| | #endif |
| |
|
| | HIDE( |
| | |
| | IS_SAME(metal::as_lambda<std::shared_ptr<int>>, metal::lambda<std::shared_ptr>); |
| | IS_SAME(metal::as_lambda<std::unique_ptr<int>>, metal::lambda<std::unique_ptr>); |
| | IS_SAME(metal::as_lambda<std::tuple<int, char, float>>, metal::lambda<std::tuple>); |
| | |
| | ) |
| |
|
| | HIDE( |
| | |
| | IS_SAME(metal::invoke<metal::trait<std::is_fundamental>, int>, metal::true_); |
| | IS_SAME(metal::invoke<metal::trait<std::is_fundamental>, void>, metal::true_); |
| |
|
| | IS_SAME(metal::invoke<metal::trait<std::is_integral>, int>, metal::true_); |
| | IS_SAME(metal::invoke<metal::trait<std::is_integral>, void>, metal::false_); |
| |
|
| | IS_SAME(metal::invoke<metal::trait<std::is_class>, int>, metal::false_); |
| | IS_SAME(metal::invoke<metal::trait<std::is_class>, void>, metal::false_); |
| |
|
| | IS_SAME(metal::invoke<metal::trait<std::is_convertible>, int*, void*>, metal::true_); |
| | IS_SAME(metal::invoke<metal::trait<std::is_convertible>, void*, int*>, metal::false_); |
| | |
| | ) |
| |
|
| | HIDE( |
| | |
| | IS_SAME(metal::invoke<metal::lazy<std::add_pointer>, int>, int*); |
| | IS_SAME(metal::invoke<metal::lazy<std::decay>, int()>, int(*)()); |
| | IS_SAME(metal::invoke<metal::lazy<std::common_type>, int[], void*>, void*); |
| | |
| | ) |
| |
|
| | HIDE( |
| | |
| | template<class val> |
| | using array = metal::identity<val[]>; |
| |
|
| | using lbd = metal::lambda<array>; |
| |
|
| | IS_SAME(metal::is_invocable<lbd, int, int>, metal::false_); |
| | IS_SAME(metal::is_invocable<lbd, void>, metal::false_); |
| | IS_SAME(metal::is_invocable<lbd, int>, metal::true_); |
| | |
| | ) |
| |
|
| | HIDE( |
| | |
| | using void_ = metal::always<void>; |
| |
|
| | IS_SAME(metal::invoke<void_>, void); |
| | IS_SAME(metal::invoke<void_, bool, char, long, float>, void); |
| | IS_SAME(metal::invoke<metal::always<void_>, bool, char, long, float>, void_); |
| | |
| | ) |
| |
|
| | HIDE( |
| | |
| | IS_SAME(metal::invoke<metal::arg<1>, bool, char, long, float>, bool); |
| | IS_SAME(metal::invoke<metal::arg<2>, bool, char, long, float>, char); |
| | IS_SAME(metal::invoke<metal::arg<3>, bool, char, long, float>, long); |
| | IS_SAME(metal::invoke<metal::arg<4>, bool, char, long, float>, float); |
| | |
| | ) |
| |
|
| | #if !defined(METAL_WORKAROUND) |
| |
|
| | HIDE( |
| | |
| | using lbd = metal::lazy<std::common_type>; |
| |
|
| | IS_SAME(metal::invoke<lbd, bool, char, long, float>, float); |
| | |
| | ) |
| |
|
| | HIDE( |
| | |
| | using lbd = metal::lazy<std::common_type>; |
| |
|
| | IS_SAME(metal::apply<lbd, metal::list<bool, char, long, float>>, float); |
| | |
| | ) |
| |
|
| | HIDE( |
| | |
| | using promote = metal::partial<metal::lazy<std::common_type>, int>; |
| |
|
| | IS_SAME(metal::invoke<promote, char>, int); |
| | IS_SAME(metal::invoke<promote, short>, int); |
| | IS_SAME(metal::invoke<promote, long>, long); |
| | |
| | ) |
| |
|
| | HIDE( |
| | |
| | using promote = metal::bind< |
| | metal::lazy<std::common_type>, |
| | metal::always<int>, |
| | metal::_1 |
| | >; |
| |
|
| | IS_SAME(metal::invoke<promote, char>, int); |
| | IS_SAME(metal::invoke<promote, short>, int); |
| | IS_SAME(metal::invoke<promote, long>, long); |
| |
|
| | using uac = metal::bind< |
| | metal::lazy<std::common_type>, |
| | metal::bind<promote, metal::_1>, |
| | metal::bind<promote, metal::_2> |
| | >; |
| |
|
| | IS_SAME(metal::invoke<uac, int, long>, long); |
| | IS_SAME(metal::invoke<uac, char, char>, int); |
| | IS_SAME(metal::invoke<uac, short, float>, float); |
| | |
| | ) |
| |
|
| | #endif |
| |
|