This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.

### 2269. Container iterators and argument-dependent lookup

Section: 22.2.1 [container.requirements.general] Status: New Submitter: Matt Austern Opened: 2013-06-26 Last modified: 2016-01-28

Priority: 4

View other active issues in [container.requirements.general].

View all other issues in [container.requirements.general].

View all issues with New status.

Discussion:

Consider the following code snippet:

>     #include <vector>
>     #include <algorithm>

>     int main() {
>       std::vector<int> v1(100, 3);
>       std::vector<int> v2(100);
>       copy(v1.begin(), v1.end(), v2.begin());
>     }

It compiles without error on my desktop. Is it required to? I can't find evidence from the standard that it is. In my test `std::copy` was found by argument-dependent lookup because the implementation I used made `std::vector<int>::iterator` a user-defined type defined in namespace `std`. But the standard only requires `std::vector<int>::iterator` to be an implementation specified random access iterator type. I can't find anything requiring it to be a user-defined type at all (and in fact there are reasonable implementation where it isn't), let alone a user defined type defined in a specific namespace.

Since the defining namespace of container iterators is visible to users, should the standard say anything about what that namespace is?

Proposed resolution: