Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix noexcept specifier expressions for move operations #93

Open
wants to merge 9 commits into
base: master
Choose a base branch
from

Conversation

bobbleclank
Copy link
Contributor

This pull request fixes the noexcept specifier expressions for the move constructor and the move assignment operator.

For the move constructor, version P0323R10 of the proposal has the following remark:

The expression inside noexcept is equivalent to:

  • is_nothrow_move_constructible_v is true or T is cv void; and
  • is_nothrow_move_constructible_v is true.

The fix is separated into two commits, the first adds the or-T-is-void part, and the second adds the requirement on E. Test code is included to show the effects of the changes.

For the move assignment operator, the proposal has the following remark:

The expression inside noexcept is equivalent to: is_nothrow_move_assignable_v is true and is_nothrow_move_constructible_v is true.

The fix assumes that the above remark is in error, and that it should be:

The expression inside noexcept is equivalent to:

  • is_nothrow_move_assignable_v is true and is_nothrow_move_constructible_v is true, or T is cv void; and
  • is_nothrow_move_assignable_v is true and is_nothrow_move_constructible_v is true.

Again the fix is separated into two commits and includes test code.

T being void should not prevent the move constructor from being declared
noexcept.
T being void should not prevent the move assignment operator from being
declared noexcept.
The move constructor should not be declared noexcept if E is not
nothrow-move-constructible.
The move assignment operator should not be declared noexcept if E is not
nothrow-move-constructible or is not nothrow-move-assignable.
Was not applied to the change made in commit
96d547c
Remove noexcept(false) specifier from move assignment operator.

This is how the other can-throw-move test classes are defined. And a
non-noexcept move assignment operator is not required for the current tests.
@bobbleclank
Copy link
Contributor Author

The "tweak test class" commit was added with the hope of getting CI to succeed. However the Visual Studio 2015 build still fails.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant