#include #include "example.hpp" /// [bool] using true_ = metal::_1; using false_ = metal::_2; /// [bool] IS_SAME(metal::invoke, true_); IS_SAME(metal::invoke, false_); IS_SAME(metal::invoke, false_); IS_SAME(metal::invoke, true_); HIDE( /// [not_expr] template using not_ = metal::invoke; IS_SAME(not_, false_); IS_SAME(not_, true_); /// [not_expr] ) /// [not] using not_ = metal::bind< metal::lambda, metal::_1, metal::always, metal::always >; IS_SAME(metal::invoke, false_); IS_SAME(metal::invoke, true_); /// [not] /// [and] // λx λy x y x using and_ = metal::bind< metal::lambda, metal::_1, metal::_2, metal::_1 >; IS_SAME(metal::invoke, true_); IS_SAME(metal::invoke, false_); IS_SAME(metal::invoke, false_); IS_SAME(metal::invoke, false_); /// [and] /// [or] // λx λy x x y using or_ = metal::bind< metal::lambda, metal::_1, metal::_1, metal::_2 >; IS_SAME(metal::invoke, true_); IS_SAME(metal::invoke, true_); IS_SAME(metal::invoke, true_); IS_SAME(metal::invoke, false_); /// [or] /// [xor] // λx λy x (not y) y using xor_ = metal::bind< metal::lambda, metal::_1, metal::bind, metal::_2 >; IS_SAME(metal::invoke, false_); IS_SAME(metal::invoke, true_); IS_SAME(metal::invoke, true_); IS_SAME(metal::invoke, false_); /// [xor]