2324. Insert iterator constructors should use addressof()

Section: [back.insert.iter.cons], [front.insert.iter.cons], [insert.iter.cons] Status: C++14 Submitter: Stephan T. Lavavej Opened: 2013-09-21 Last modified: 2017-07-06

Priority: 0

View all issues with C++14 status.

Discussion: [back.insert.iter.cons]/1, [front.insert.iter.cons]/1, and [insert.iter.cons]/1 say "Initializes container with &x", which doesn't defend against containers overloading operator&(). Containers are now required to have such defenses for their elements, so we may as well be consistent here.

[Issaquah 2014-02-11: Move to Immediate]

Proposed resolution:

This wording is relative to N3691.

  1. Edit [back.insert.iter.cons]/1 as indicated:

    explicit back_insert_iterator(Container& x);

    -1- Effects: Initializes container with &xstd::addressof(x).

  2. Edit [front.insert.iter.cons]/1 as indicated:

    explicit front_insert_iterator(Container& x);

    -1- Effects: Initializes container with &xstd::addressof(x).

  3. Edit [insert.iter.cons]/1 as indicated:

    insert_iterator(Container& x, typename Container::iterator i);

    -1- Effects: Initializes container with &xstd::addressof(x) and iter with i.