以下程序格式正确吗?
#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下进行编译。