比较两个end()迭代器

aaf*_*foo 3 c++ iterator stl

list<int> foo;
list<int> foo2;
list<int>::iterator foo_end = foo.end();
list<int>::iterator foo2_end = foo2.end();

for (list<int>::iterator it = foo.begin(); it != foo2_end; ++foo) <- notice != comparison here
{
   ...
Run Code Online (Sandbox Code Playgroud)

这允许吗?它会正常工作吗?

我倾向于认为这是依赖于实现的,任何人都知道标准是否说明了这一点?

Jam*_*lis 7

报告了一个缺陷(LWG缺陷446).缺陷报告询问比较引用不同容器元素的迭代器是否有效.

缺陷报告中的注释解释说,这样做的意图当然是未定义的,但没有明确说明它是未定义的.

拟议的决议是在标准中添加以下内容,明确说明它未定义:

直接或间接评估任何比较函数或二元运算符的结果,其中两个迭代器值作为从两个不同范围r1和r2(包括它们的过去值)获得的参数,这两个范围不是一个公共范围的子范围未定义,除非另有明确说明.

编辑: 该语言不包含在C++ 0x FCD中.这个问题实际上是通过N3066的变化解决的; 特别是以下补充(§24.2.5/ 2):

==前向迭代器的域是相同底层序列上的迭代器的域.