C++ 具名要求:遗留迭代器 (LegacyIterator)
来自cppreference.com
                    
                                        
                    
                    
                                                            
                    遗留迭代器 (LegacyIterator) 要求描述可以用来标识和遍历容器中的元素的类型。
遗留迭代器 (LegacyIterator) 是用于其他迭代器类型的基础集合:遗留输入迭代器 (LegacyInputIterator) 、遗留输出迭代器 (LegacyOutputIterator) 、遗留向前迭代器 (LegacyForwardIterator) 、遗留双向迭代器 (LegacyBidirectionalIterator) 及遗留随机访问迭代器 (LegacyRandomAccessIterator) 。可以把迭代器想象成指针的抽象。
要求
若下列条件成立,则类型 It 满足遗留迭代器 (LegacyIterator) 
-  类型 
It满足可复制构造 (CopyConstructible) ,且 -  类型 
It满足可复制赋值 (CopyAssignable) ,且 -  类型 
It满足可析构 (Destructible) -  类型 
It的左值满足可交换 (Swappable) ,且 -  std::iterator_traits<It> 拥有成员 typedef 
value_type、difference_type、reference、pointer和iterator_category且 
给定
-  类型 
It的左值r, 
下列表达式必须合法,且拥有其指定的效果:
| 表达式 | 返回类型 | 前条件 | 
|---|---|---|
| *r | 未指明 | r 可解引用(见下文)
 | 
| ++r | It& | r 可增(表达式 ++r 的行为有定义)
 | 
可解引用的迭代器
表达式 *i 的行为得到定义的迭代器被称作可解引用(dereferenceable)。
下列情况下的迭代器不可解引用
- 它们是末尾后迭代器(包括数组末尾后面一个位置的指针)或起始前迭代器。在特定实现中这些迭代器可能可解引用,但库从不假设它们能。
 - 它们是孤立迭代器,即是说,没有关联到任何序列的迭代器。空指针,以及默认构造的指针(保有不确定的值)是孤立的。
 - 在它们所指代的序列上,它们已经因使迭代器失效的操作之一而失效了。
 
概念为了定义 std::iterator_traits,定义了以下仅用于阐释的概念。 
 其中仅用于阐释的概念   | 
(C++20 起) | 
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| DR | 应用于 | 出版时的行为 | 正确行为 | 
|---|---|---|---|
| LWG 3420 | C++20 |  仅用于阐释的概念首先检查 copyable
 | 
 仅若 requires 表达式返回 true 才检查 copyable
 | 
参阅
|    (C++20)  | 
  指定该类型对象可以自增且可以解引用  (概念)  |