diff options
Diffstat (limited to 'libcxx/test/utilities/tuple/tuple.tuple/MoveOnly.h')
-rw-r--r-- | libcxx/test/utilities/tuple/tuple.tuple/MoveOnly.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libcxx/test/utilities/tuple/tuple.tuple/MoveOnly.h b/libcxx/test/utilities/tuple/tuple.tuple/MoveOnly.h new file mode 100644 index 00000000000..b7d62b71374 --- /dev/null +++ b/libcxx/test/utilities/tuple/tuple.tuple/MoveOnly.h @@ -0,0 +1,41 @@ +#ifndef MOVEONLY_H +#define MOVEONLY_H + +#ifdef _LIBCPP_MOVE + +#include <cstddef> +#include <functional> + +class MoveOnly +{ + MoveOnly(const MoveOnly&); + MoveOnly& operator=(const MoveOnly&); + + int data_; +public: + MoveOnly(int data = 1) : data_(data) {} + MoveOnly(MoveOnly&& x) + : data_(x.data_) {x.data_ = 0;} + MoveOnly& operator=(MoveOnly&& x) + {data_ = x.data_; x.data_ = 0; return *this;} + + 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_;} +}; + +namespace std { + +template <> +struct hash<MoveOnly> + : public std::unary_function<MoveOnly, std::size_t> +{ + std::size_t operator()(const MoveOnly& x) const {return x.get();} +}; + +} + +#endif + +#endif |