[libc++][test] Clean up libcxx/test/support/MoveOnly.h

Remove copy and copy assignment rather than have them as private declarations.
They are superfluous given the move and move assignment.

As a drive-by, also specialize `std::hash` without reopening `namespace std`.

Differential Revision: https://reviews.llvm.org/D118502
This commit is contained in:
Joe Loser 2022-01-28 14:38:10 -05:00
parent da0e5b885b
commit 81cc834a48
No known key found for this signature in database
GPG Key ID: 1CDBEBC050EA230D
2 changed files with 3 additions and 9 deletions

View File

@ -28,14 +28,14 @@ int main(int, char**) {
{
MoveOnly mo[] = {MoveOnly{3}};
// expected-error@array:* {{to_array requires copy constructible elements}}
// expected-error@array:* {{calling a private constructor}}
// expected-error@array:* {{call to implicitly-deleted copy constructor of 'MoveOnly'}}
std::to_array(mo); // expected-note {{requested here}}
}
{
const MoveOnly cmo[] = {MoveOnly{3}};
// expected-error@array:* {{to_array requires move constructible elements}}
// expected-error@array:* {{calling a private constructor}}
// expected-error@array:* {{call to implicitly-deleted copy constructor of 'MoveOnly'}}
std::to_array(std::move(cmo)); // expected-note {{requested here}}
}

View File

@ -18,9 +18,6 @@
class MoveOnly
{
MoveOnly(const MoveOnly&);
MoveOnly& operator=(const MoveOnly&);
int data_;
public:
constexpr MoveOnly(int data = 1) : data_(data) {}
@ -53,18 +50,15 @@ public:
friend void operator,(T t, U u) = delete;
};
namespace std {
template <>
struct hash<MoveOnly>
struct std::hash<MoveOnly>
{
typedef MoveOnly argument_type;
typedef size_t result_type;
constexpr size_t operator()(const MoveOnly& x) const {return x.get();}
};
}
#endif // TEST_STD_VER >= 11
#endif // MOVEONLY_H