以下程序格式正确吗?
#include <vector>
struct A {
explicit A(int) {}
};
int main() {
std::vector<int> vi = {1, 2, 3, 4, 5};
std::vector<A> va(vi.begin(), vi.end());
}
根据C ++ 17 [sequence.reqmts],对于
X u(i, j);
X
序列容器在哪里,是:
T
应EmplaceConstructible
为X
从*i
。
但是,在上段中指出:
i
并j
表示满足输入迭代器要求的迭代器,并且是指可隐式转换为的元素value_type
,
因此,在我看来,这两个要求都必须满足:范围的值类型必须隐式转换为容器的值类型,并且 EmplaceConstructible
必须满足(这意味着分配器必须能够执行所需的初始化) 。由于int
不能隐式转换为A
,因此该程序应格式错误。
但是,令人惊讶的是,它似乎可以在GCC下进行编译。