Chương trình sau đây có được hình thành tốt không?
#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());
}
Theo C ++ 17 [Sequ.reqmts], yêu cầu đối với
X u(i, j);
nơi Xchứa một chuỗi, là:
Tsẽ đượcEmplaceConstructiblevàoXtừ*i.
Tuy nhiên, trong đoạn trước có ghi rằng:
ivàjbiểu thị các trình vòng lặp thỏa mãn các yêu cầu của trình vòng lặp đầu vào và tham khảo các phần tử hoàn toàn có thể chuyển đổi thànhvalue_type,
Do đó, dường như cả hai yêu cầu cần phải được đáp ứng: loại giá trị của phạm vi phải được chuyển đổi hoàn toàn thành loại giá trị của container và EmplaceConstructible phải được thỏa mãn (có nghĩa là người cấp phát phải có thể thực hiện khởi tạo được yêu cầu) . Vì intkhông hoàn toàn có thể chuyển đổi thành A, chương trình này sẽ không được định dạng đúng.
Tuy nhiên, đáng ngạc nhiên, nó dường như được biên dịch theo GCC .