// Copyright (c) 2018-2020 Emil Dotchevski and Reverge Studios, Inc. // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include #include "_test_ec.hpp" #include "lightweight_test.hpp" namespace leaf = boost::leaf; enum class my_error { e1=1, e2, e3 }; struct e_my_error { my_error value; }; struct e_my_error_f { my_error v; my_error value() const { return v; } }; int main() { { my_error ec = my_error::e1; static_assert(std::is_same::matched_type>::value, "match type deduction error"); static_assert(std::is_same::enum_type>::value, "match type deduction error"); BOOST_TEST(( leaf::match(ec)() )); BOOST_TEST(( !leaf::match(ec)() )); BOOST_TEST(( leaf::match(ec)() )); } { e_my_error ec = { my_error::e1 }; static_assert(std::is_same::matched_type>::value, "match type deduction error"); static_assert(std::is_same::enum_type>::value, "match type deduction error"); BOOST_TEST(( leaf::match(ec)() )); BOOST_TEST(( !leaf::match(ec)() )); BOOST_TEST(( leaf::match(ec)() )); } { e_my_error_f ec = { my_error::e1 }; static_assert(std::is_same::matched_type>::value, "match type deduction error"); static_assert(std::is_same::enum_type>::value, "match type deduction error"); BOOST_TEST(( leaf::match(ec)() )); BOOST_TEST(( !leaf::match(ec)() )); BOOST_TEST(( leaf::match(ec)() )); } { std::error_code ec = errc_a::a0; static_assert(std::is_same, cond_x::x00>::matched_type>::value, "match type deduction error"); static_assert(std::is_same, cond_x::x00>::enum_type>::value, "match type deduction error"); BOOST_TEST(( leaf::match, cond_x::x00>(ec)() )); BOOST_TEST(( !leaf::match, cond_x::x11>(ec)() )); BOOST_TEST(( leaf::match, cond_x::x11, cond_x::x00>(ec)() )); #if __cplusplus >= 201703L static_assert(std::is_same::matched_type>::value, "match type deduction error"); static_assert(std::is_same::enum_type>::value, "match type deduction error"); BOOST_TEST(( leaf::match(ec)() )); BOOST_TEST(( !leaf::match(ec)() )); BOOST_TEST(( leaf::match(ec)() )); #endif } return boost::report_errors(); }