macro.adapt_struct.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // Copyright Louis Dionne 2013-2017
  2. // Distributed under the Boost Software License, Version 1.0.
  3. // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
  4. #include <boost/hana/adapt_struct.hpp>
  5. #include <boost/hana/assert.hpp>
  6. #include <boost/hana/concept/struct.hpp>
  7. #include <boost/hana/contains.hpp>
  8. #include <boost/hana/string.hpp>
  9. #include <laws/base.hpp>
  10. namespace hana = boost::hana;
  11. using hana::test::ct_eq;
  12. namespace ns {
  13. struct Data0 { };
  14. struct Data1 {
  15. ct_eq<1> member1;
  16. };
  17. struct Data2 {
  18. ct_eq<1> member1;
  19. ct_eq<2> member2;
  20. };
  21. struct Data3 {
  22. ct_eq<1> member1;
  23. ct_eq<2> member2;
  24. ct_eq<3> member3;
  25. };
  26. struct MemberArray {
  27. int array[10];
  28. };
  29. }
  30. BOOST_HANA_ADAPT_STRUCT(ns::Data0);
  31. BOOST_HANA_ADAPT_STRUCT(ns::Data1, member1);
  32. BOOST_HANA_ADAPT_STRUCT(ns::Data2, member1, member2);
  33. BOOST_HANA_ADAPT_STRUCT(ns::Data3, member1, member2, member3);
  34. BOOST_HANA_ADAPT_STRUCT(ns::MemberArray, array);
  35. static_assert(hana::Struct<ns::Data0>::value, "");
  36. static_assert(hana::Struct<ns::Data1>::value, "");
  37. static_assert(hana::Struct<ns::Data2>::value, "");
  38. static_assert(hana::Struct<ns::Data3>::value, "");
  39. static_assert(hana::Struct<ns::MemberArray>::value, "");
  40. int main() {
  41. BOOST_HANA_CONSTANT_CHECK(hana::contains(ns::Data1{}, BOOST_HANA_STRING("member1")));
  42. BOOST_HANA_CONSTANT_CHECK(hana::contains(ns::Data2{}, BOOST_HANA_STRING("member1")));
  43. BOOST_HANA_CONSTANT_CHECK(hana::contains(ns::Data2{}, BOOST_HANA_STRING("member2")));
  44. BOOST_HANA_CONSTANT_CHECK(hana::contains(ns::Data3{}, BOOST_HANA_STRING("member1")));
  45. BOOST_HANA_CONSTANT_CHECK(hana::contains(ns::Data3{}, BOOST_HANA_STRING("member2")));
  46. BOOST_HANA_CONSTANT_CHECK(hana::contains(ns::Data3{}, BOOST_HANA_STRING("member3")));
  47. BOOST_HANA_CONSTANT_CHECK(hana::contains(ns::MemberArray{}, BOOST_HANA_STRING("array")));
  48. }