2324. Insert iterator constructors should use addressof()

Section: 27.5.2.2.1 [back.insert.iter.cons], 27.5.2.4.1 [front.insert.iter.cons], 27.5.2.6.1 [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:

27.5.2.2.1 [back.insert.iter.cons]/1, 27.5.2.4.1 [front.insert.iter.cons]/1, and 27.5.2.6.1 [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 27.5.2.2.1 [back.insert.iter.cons]/1 as indicated:

    explicit back_insert_iterator(Container& x);
    

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

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

    explicit front_insert_iterator(Container& x);
    

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

  3. Edit 27.5.2.6.1 [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.