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