我在标准 (n4296)、23.2.3/4 (表 100) 中看到了对序列 stl 容器的要求,并阅读了一个采用参数迭代器的构造函数(X - 容器,i 和 j - 输入迭代器)
X(i, j)
X a(i, j)
要求容器的元素类型为 EmplaceConstructible。
Requires: T shall be EmplaceConstructible into X from *i
我认为可以通过为范围内的每个迭代器调用 std::allocator_traits::construct (m, p, *it) 方法来实现构造函数(其中 m - A 类型的分配器,p - 指向内存的指针,it - 迭代器[i; j),并且元素只有 CopyInsertable 概念是必需的,因为只为复制/移动提供了一个参数,而 EmplaceConstructible 概念要求元素从一组参数构造。这个决定有什么理由吗?