[libc++] Make MoveOnly constexpr-friendly

This is necessary when writing constexpr tests.
This commit is contained in:
Louis Dionne 2020-05-22 11:20:27 -04:00
parent 429f030899
commit a4b8ee6422
1 changed files with 9 additions and 9 deletions

View File

@ -23,18 +23,18 @@ class MoveOnly
int data_;
public:
MoveOnly(int data = 1) : data_(data) {}
MoveOnly(MoveOnly&& x)
constexpr MoveOnly(int data = 1) : data_(data) {}
constexpr MoveOnly(MoveOnly&& x)
: data_(x.data_) {x.data_ = 0;}
MoveOnly& operator=(MoveOnly&& x)
constexpr MoveOnly& operator=(MoveOnly&& x)
{data_ = x.data_; x.data_ = 0; return *this;}
int get() const {return data_;}
constexpr int get() const {return data_;}
bool operator==(const MoveOnly& x) const {return data_ == x.data_;}
bool operator< (const MoveOnly& x) const {return data_ < x.data_;}
MoveOnly operator+(const MoveOnly& x) const { return MoveOnly{data_ + x.data_}; }
MoveOnly operator*(const MoveOnly& x) const { return MoveOnly{data_ * x.data_}; }
constexpr bool operator==(const MoveOnly& x) const {return data_ == x.data_;}
constexpr bool operator< (const MoveOnly& x) const {return data_ < x.data_;}
constexpr MoveOnly operator+(const MoveOnly& x) const { return MoveOnly{data_ + x.data_}; }
constexpr MoveOnly operator*(const MoveOnly& x) const { return MoveOnly{data_ * x.data_}; }
};
namespace std {
@ -44,7 +44,7 @@ struct hash<MoveOnly>
{
typedef MoveOnly argument_type;
typedef size_t result_type;
std::size_t operator()(const MoveOnly& x) const {return x.get();}
constexpr std::size_t operator()(const MoveOnly& x) const {return x.get();}
};
}