#ifndef SOVLESPACE_HANDLE_H
#define SOVLESPACE_HANDLE_H
#include
#include
namespace SolveSpace {
/// Trait indicating which types are handle types and should get the associated operators.
/// Specialize for each handle type and inherit from std::true_type.
template
struct IsHandleOracle : std::false_type {};
// Equality-compare any two instances of a handle type.
template
static inline typename std::enable_if::type
operator==(T const &lhs, T const &rhs) {
return lhs.v == rhs.v;
}
// Inequality-compare any two instances of a handle type.
template
static inline typename std::enable_if::type
operator!=(T const &lhs, T const &rhs) {
return !(lhs == rhs);
}
// Less-than-compare any two instances of a handle type.
template
static inline typename std::enable_if::type
operator