60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
/*
|
|
Copyright 2020 Glen Joseph Fernandes
|
|
(glenjofe@gmail.com)
|
|
|
|
Distributed under the Boost Software License, Version 1.0.
|
|
(http://www.boost.org/LICENSE_1_0.txt)
|
|
*/
|
|
|
|
#include <boost/config.hpp>
|
|
#if !defined(BOOST_NO_CXX11_CONSTEXPR) && \
|
|
(!defined(BOOST_MSVC) || (BOOST_MSVC >= 1922))
|
|
#include <boost/operators.hpp>
|
|
#include <boost/static_assert.hpp>
|
|
|
|
namespace {
|
|
|
|
class Value
|
|
: boost::operators<Value> {
|
|
public:
|
|
BOOST_OPERATORS_CONSTEXPR explicit Value(int v)
|
|
: v_(v) { }
|
|
|
|
BOOST_OPERATORS_CONSTEXPR bool
|
|
operator<(const Value& x) const {
|
|
return v_ < x.v_;
|
|
}
|
|
|
|
BOOST_OPERATORS_CONSTEXPR bool
|
|
operator==(const Value& x) const {
|
|
return v_ == x.v_;
|
|
}
|
|
|
|
private:
|
|
int v_;
|
|
};
|
|
|
|
} // namespace
|
|
|
|
BOOST_STATIC_ASSERT(!static_cast<bool>(Value(1) == Value(2)));
|
|
BOOST_STATIC_ASSERT(Value(1) != Value(2));
|
|
BOOST_STATIC_ASSERT(Value(1) < Value(2));
|
|
BOOST_STATIC_ASSERT(Value(1) <= Value(2));
|
|
BOOST_STATIC_ASSERT(!static_cast<bool>(Value(1) > Value(2)));
|
|
BOOST_STATIC_ASSERT(!static_cast<bool>(Value(1) >= Value(2)));
|
|
|
|
BOOST_STATIC_ASSERT(!static_cast<bool>(Value(2) == Value(1)));
|
|
BOOST_STATIC_ASSERT(Value(2) != Value(1));
|
|
BOOST_STATIC_ASSERT(!static_cast<bool>(Value(2) < Value(1)));
|
|
BOOST_STATIC_ASSERT(!static_cast<bool>(Value(2) <= Value(1)));
|
|
BOOST_STATIC_ASSERT(Value(2) > Value(1));
|
|
BOOST_STATIC_ASSERT(Value(2) >= Value(1));
|
|
|
|
BOOST_STATIC_ASSERT(Value(1) == Value(1));
|
|
BOOST_STATIC_ASSERT(!static_cast<bool>(Value(1) != Value(1)));
|
|
BOOST_STATIC_ASSERT(!static_cast<bool>(Value(1) < Value(1)));
|
|
BOOST_STATIC_ASSERT(Value(1) <= Value(1));
|
|
BOOST_STATIC_ASSERT(!static_cast<bool>(Value(1) > Value(1)));
|
|
BOOST_STATIC_ASSERT(Value(1) >= Value(1));
|
|
#endif
|