Per C.66: a global edit adding noexcept to move constructor/assignment examples (#1016)

This commit is contained in:
TalLancaster 2017-08-06 08:25:29 -06:00 committed by Jonathan Wakely
parent 4ffab15e77
commit e61f111301

View File

@ -5867,7 +5867,7 @@ After `y = std::move(x)` the value of `y` should be the value `x` had and `x` sh
class X { // OK: value semantics class X { // OK: value semantics
public: public:
X(); X();
X(X&& a); // move X X(X&& a) noexcept; // move X
void modify(); // change the value of X void modify(); // change the value of X
// ... // ...
~X() { delete[] p; } ~X() { delete[] p; }
@ -5925,7 +5925,7 @@ If `x = x` changes the value of `x`, people will be surprised and bad errors may
// ... // ...
}; };
Foo& Foo::operator=(Foo&& a) // OK, but there is a cost Foo& Foo::operator=(Foo&& a) noexcept // OK, but there is a cost
{ {
if (this == &a) return *this; // this line is redundant if (this == &a) return *this; // this line is redundant
s = std::move(a.s); s = std::move(a.s);
@ -16824,8 +16824,8 @@ Flag uses where an explicitly specialized type exactly matches the types of the
explicit X(int); explicit X(int);
X(const X&); // copy X(const X&); // copy
X operator=(const X&); X operator=(const X&);
X(X&&); // move X(X&&) noexcept; // move
X& operator=(X&&); X& operator=(X&&) noexcept;
~X(); ~X();
// ... no more constructors ... // ... no more constructors ...
}; };
@ -20896,7 +20896,7 @@ If you define a move constructor, you must also define a move assignment operato
// BAD: failed to also define a copy assignment operator // BAD: failed to also define a copy assignment operator
X(x&&) { /* stuff */ } X(x&&) noexcept { /* stuff */ }
// BAD: failed to also define a move assignment operator // BAD: failed to also define a move assignment operator
}; };