HomePhabricator

Make `vector` unconditionally move elements when exceptions are disabled.

Description

Make vector unconditionally move elements when exceptions are disabled.

Summary:
std::vector<T> is free choose between using copy or move operations when it needs to resize. The standard only candidates that the correct exception safety guarantees are provided. When exceptions are disabled these guarantees are trivially satisfied. Meaning vector is free to optimize it's implementation by moving instead of copying.

This patch makes std::vector unconditionally move elements when exceptions are disabled.

This optimization is conforming according to the current standard wording.

There are concerns that moving in -fno-noexceptionsmode will be a surprise to users. For example, a user may be surprised to find their code is slower with exceptions enabled than it is disabled. I'm sympathetic to this surprised, but I don't think it should block this optimization.

Reviewers: mclow.lists, ldionne, rsmith

Reviewed By: ldionne

Subscribers: zoecarver, christof, dexonsmith, libcxx-commits

Tags: #libc

Differential Revision: https://reviews.llvm.org/D62228

Details

Committed
EricWFAug 30 2019, 12:01 PM
Reviewer
ldionne
Differential Revision
D62228: Make `vector` unconditionally move elements when exceptions are disabled.
Parents
rL370501: gn build: Merge r370500
Branches
Unknown
Tags
Unknown