• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 Copyright 2020 Glen Joseph Fernandes
3 (glenjofe@gmail.com)
4 
5 Distributed under the Boost Software License, Version 1.0.
6 (http://www.boost.org/LICENSE_1_0.txt)
7 */
8 
9 #include <boost/config.hpp>
10 #if !defined(BOOST_NO_CXX11_CONSTEXPR) && \
11     (!defined(BOOST_MSVC) || (BOOST_MSVC >= 1922))
12 #include <boost/operators.hpp>
13 #include <boost/static_assert.hpp>
14 
15 namespace {
16 
17 class Value
18     : boost::operators<Value> {
19 public:
Value(int v)20     BOOST_OPERATORS_CONSTEXPR explicit Value(int v)
21         : v_(v) { }
22 
23     BOOST_OPERATORS_CONSTEXPR bool
operator <(const Value & x) const24     operator<(const Value& x) const {
25         return v_ < x.v_;
26     }
27 
28     BOOST_OPERATORS_CONSTEXPR bool
operator ==(const Value & x) const29     operator==(const Value& x) const {
30         return v_ == x.v_;
31     }
32 
33 private:
34     int v_;
35 };
36 
37 } // namespace
38 
39 BOOST_STATIC_ASSERT(!static_cast<bool>(Value(1) == Value(2)));
40 BOOST_STATIC_ASSERT(Value(1) != Value(2));
41 BOOST_STATIC_ASSERT(Value(1) < Value(2));
42 BOOST_STATIC_ASSERT(Value(1) <= Value(2));
43 BOOST_STATIC_ASSERT(!static_cast<bool>(Value(1) > Value(2)));
44 BOOST_STATIC_ASSERT(!static_cast<bool>(Value(1) >= Value(2)));
45 
46 BOOST_STATIC_ASSERT(!static_cast<bool>(Value(2) == Value(1)));
47 BOOST_STATIC_ASSERT(Value(2) != Value(1));
48 BOOST_STATIC_ASSERT(!static_cast<bool>(Value(2) < Value(1)));
49 BOOST_STATIC_ASSERT(!static_cast<bool>(Value(2) <= Value(1)));
50 BOOST_STATIC_ASSERT(Value(2) >  Value(1));
51 BOOST_STATIC_ASSERT(Value(2) >= Value(1));
52 
53 BOOST_STATIC_ASSERT(Value(1) == Value(1));
54 BOOST_STATIC_ASSERT(!static_cast<bool>(Value(1) != Value(1)));
55 BOOST_STATIC_ASSERT(!static_cast<bool>(Value(1) < Value(1)));
56 BOOST_STATIC_ASSERT(Value(1) <= Value(1));
57 BOOST_STATIC_ASSERT(!static_cast<bool>(Value(1) > Value(1)));
58 BOOST_STATIC_ASSERT(Value(1) >= Value(1));
59 #endif
60