#include #include "example.hpp" HIDE( /// [val1] using val = int; /// [val1] IS_SAME(metal::is_value, metal::true_); ) HIDE( /// [val2] using val = decltype(3.14); /// [val2] IS_SAME(metal::is_value, metal::true_); ) HIDE( /// [val3] struct val { /*...*/ }; /// [val3] IS_SAME(metal::is_value, metal::true_); ) HIDE( /// [not_a_val1] int not_a_val; /// [not_a_val1] ) #if !defined(METAL_WORKAROUND) HIDE( static constexpr /// [not_a_val2] auto not_a_val = 3.14; /// [not_a_val2] ) #endif HIDE( /// [not_a_val3] template struct not_a_val { /*...*/ }; /// [not_a_val3] ) HIDE( /// [value] using num = metal::number<42>; IS_SAME(metal::is_number>, metal::false_); IS_SAME(metal::value::type, num); using lbd = metal::lambda; IS_SAME(metal::is_lambda>, metal::false_); IS_SAME(metal::value::type, lbd); using list = metal::list<>; IS_SAME(metal::is_list>, metal::false_); IS_SAME(metal::value::type, list); /// [value] ) HIDE( /// [is_value] template struct has_type_impl : metal::false_ {}; template struct has_type_impl> : metal::true_ {}; template using has_type = typename has_type_impl::type; IS_SAME(has_type>, metal::true_); IS_SAME(has_type>, metal::false_); /// [is_value] ) HIDE( /// [eval] IS_SAME(metal::eval>, void); IS_SAME(metal::eval>, void*); /// [eval] ) HIDE( /// [identity] IS_SAME(metal::identity, void); IS_SAME(metal::invoke, void>, void); template using transform_if = metal::transform< metal::bind, pred, lbd, metal::lambda>, seq >; using l = metal::list; IS_SAME( transform_if, metal::lazy, l>, metal::list ); /// [identity] ) HIDE( /// [same] IS_SAME(metal::same<>, metal::true_); IS_SAME(metal::same, metal::true_); IS_SAME(metal::same, metal::true_); IS_SAME(metal::same, metal::false_); IS_SAME(metal::same, metal::false_); /// [same] ) HIDE( /// [distinct] IS_SAME(metal::distinct<>, metal::true_); IS_SAME(metal::distinct, metal::true_); IS_SAME(metal::distinct, metal::false_); IS_SAME(metal::distinct, metal::false_); IS_SAME(metal::distinct, metal::true_); /// [distinct] ) #if !defined(METAL_WORKAROUND) HIDE( /// [fold_left] template struct f {}; using lbd = metal::lambda; IS_SAME( metal::fold_left, f, long>, float>, double>, void> ); /// [fold_left] ) HIDE( /// [fold_right] template struct f {}; using lbd = metal::lambda; IS_SAME( metal::fold_right, f>>>> ); /// [fold_right] ) #endif