noexcept move on containers (e.g. list)

Marc Glisse marc.glisse@inria.fr
Wed Sep 18 10:58:00 GMT 2013


On Wed, 18 Sep 2013, Daniel Krügler wrote:

>> On 18 September 2013 09:58, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
> [..]
>> Although as you're asking specifically about move constructors (which
>> I don't think we check any preconditions on anyway) I don't know why
>> the standard considers them to have narrow contracts.
>
> I'm pretty sure that this wasn't the intention of N3279 to imply. To
> my knowledge the reason why the move constructors of containers are
> not noexcept, is because the default constructors aren't and this
> again was due to some existing implementations that could throw (in
> rare situations).

As far as I can see, an allocator's default constructor, if it exists, is 
allowed to throw (as opposed to its move constructor which isn't), which 
implies the same for a container using this allocator. So the default 
constructor can't be made noexcept, while the move constructor could, 
although that would prevent an implementation from using a 
short-string-like optimization in those containers (I didn't check if 
that was already illegal for other reasons).

-- 
Marc Glisse



More information about the Libstdc++ mailing list