From a4b8ee64223f2b942f55237e40e3bd01d9b16893 Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Fri, 22 May 2020 11:20:27 -0400 Subject: [PATCH] [libc++] Make MoveOnly constexpr-friendly This is necessary when writing constexpr tests. --- libcxx/test/support/MoveOnly.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/libcxx/test/support/MoveOnly.h b/libcxx/test/support/MoveOnly.h index 5611ebbdd3a1..f9e9298097f1 100644 --- a/libcxx/test/support/MoveOnly.h +++ b/libcxx/test/support/MoveOnly.h @@ -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 { 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();} }; }