1// Copyright 2021 Peter Dimov
2// Distributed under the Boost Software License, Version 1.0.
3// https://www.boost.org/LICENSE_1_0.txt
4
5#include <boost/describe/operators.hpp>
6#include <boost/describe/class.hpp>
7#include <boost/core/lightweight_test.hpp>
8
9#if !defined(BOOST_DESCRIBE_CXX14)
10
11#include <boost/config/pragma_message.hpp>
12
13BOOST_PRAGMA_MESSAGE("Skipping test because C++14 is not available")
14int main() {}
15
16#else
17
18namespace app
19{
20
21struct X
22{
23 void f() const {}
24 static void g() {}
25};
26
27BOOST_DESCRIBE_STRUCT(X, (), (f, g))
28
29using boost::describe::operators::operator==;
30using boost::describe::operators::operator<<;
31
32struct Y
33{
34 int a = 1;
35};
36
37BOOST_DESCRIBE_STRUCT(Y, (), (a))
38
39using boost::describe::operators::operator==;
40using boost::describe::operators::operator!=;
41using boost::describe::operators::operator<<;
42
43struct Z: X, Y
44{
45 int b = 4;
46};
47
48BOOST_DESCRIBE_STRUCT(Z, (X, Y), (b))
49
50using boost::describe::operators::operator==;
51using boost::describe::operators::operator!=;
52using boost::describe::operators::operator<<;
53
54} // namespace app
55
56int main()
57{
58 using app::X;
59
60 {
61 X x1, x2;
62 BOOST_TEST_EQ( x1, x2 );
63 }
64
65 using app::Y;
66
67 {
68 Y y1, y2, y3;
69
70 y3.a = 2;
71
72 BOOST_TEST_EQ( y1, y2 );
73 BOOST_TEST_NE( y1, y3 );
74 }
75
76 using app::Z;
77
78 {
79 Z z1, z2, z3, z4;
80
81 z3.a = 2;
82 z4.b = 3;
83
84 BOOST_TEST_EQ( z1, z2 );
85 BOOST_TEST_NE( z1, z3 );
86 BOOST_TEST_NE( z1, z4 );
87 BOOST_TEST_NE( z3, z4 );
88 }
89
90 return boost::report_errors();
91}
92
93#endif // !defined(BOOST_DESCRIBE_CXX14)
94

source code of boost/libs/describe/test/operator_eq_test.cpp