โปรแกรมต่อไปนี้มีรูปแบบที่ดีหรือไม่
#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และjiterators แสดงว่าความพึงพอใจของข้อกำหนดของข้อมูล iterator และการอ้างอิงถึงองค์ประกอบโดยปริยายแปลงสภาพให้แก่value_type,
ดังนั้นฉันคิดว่าข้อกำหนดทั้งสองจะต้องเป็นไปตาม: ประเภทค่าของช่วงจะต้องสามารถแปลงเป็นประเภทค่าของคอนเทนเนอร์โดยปริยายและ EmplaceConstructibleต้องเป็นที่พอใจ . เนื่องจากintไม่สามารถแปลงเป็นปริยายได้Aโปรแกรมนี้จึงควรมีรูปแบบไม่ดี
แต่น่าแปลกใจที่ดูเหมือนว่าจะรวบรวมภายใต้ GCC