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