mp_eval_or.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // Copyright 2019 Peter Dimov.
  2. //
  3. // Distributed under the Boost Software License, Version 1.0.
  4. //
  5. // See accompanying file LICENSE_1_0.txt or copy at
  6. // http://www.boost.org/LICENSE_1_0.txt
  7. #include <boost/mp11/utility.hpp>
  8. #include <boost/core/lightweight_test_trait.hpp>
  9. #include <cstddef>
  10. template<class T> using difference_type = typename T::difference_type;
  11. struct X
  12. {
  13. };
  14. struct Y
  15. {
  16. using difference_type = int;
  17. };
  18. int main()
  19. {
  20. using boost::mp11::mp_eval_or;
  21. using boost::mp11::mp_eval_or_q;
  22. using boost::mp11::mp_identity;
  23. using boost::mp11::mp_quote;
  24. BOOST_TEST_TRAIT_SAME(mp_eval_or<void, mp_identity>, void);
  25. BOOST_TEST_TRAIT_SAME(mp_eval_or<void, mp_identity, int>, mp_identity<int>);
  26. BOOST_TEST_TRAIT_SAME(mp_eval_or<void, mp_identity, int, int>, void);
  27. using Q_identity = mp_quote<mp_identity>;
  28. BOOST_TEST_TRAIT_SAME(mp_eval_or_q<void, Q_identity>, void);
  29. BOOST_TEST_TRAIT_SAME(mp_eval_or_q<void, Q_identity, int>, mp_identity<int>);
  30. BOOST_TEST_TRAIT_SAME(mp_eval_or_q<void, Q_identity, int, int>, void);
  31. BOOST_TEST_TRAIT_SAME(mp_eval_or<std::ptrdiff_t, difference_type, X>, std::ptrdiff_t);
  32. BOOST_TEST_TRAIT_SAME(mp_eval_or<std::ptrdiff_t, difference_type, Y>, int);
  33. using Q_diff_type = mp_quote<difference_type>;
  34. BOOST_TEST_TRAIT_SAME(mp_eval_or_q<std::ptrdiff_t, Q_diff_type, X>, std::ptrdiff_t);
  35. BOOST_TEST_TRAIT_SAME(mp_eval_or_q<std::ptrdiff_t, Q_diff_type, Y>, int);
  36. return boost::report_errors();
  37. }