Aşağıdaki program iyi biçimlendirilmiş mi?
#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 [sıra.reqmts] 'ye göre,
X u(i, j);
Xbir dizi kabı nerede :
TolacaktırEmplaceConstructibleiçineXgelen*i.
Ancak, önceki paragrafta şöyle belirtilmektedir:
ivejgirdi yineleyici gereksinimlerini karşılayan yineleyicileri belirtir ve dolaylı olarak dönüştürülebilir öğelere başvururvalue_type,
Böylece hem gereksinimlerin karşılanması gerekir geliyor bana: aralığının değer türü kabın değeri türüne örtük olarak dönüştürülebilir olmalıdır, ve EmplaceConstructible (allocator gerekli başlatma gerçekleştirmek gerekir anlamına gelir) yerine getirilmesi gerekir . Yana intörtük olarak dönüştürülebilir değildir A, bu program kötü şekillendirilmiş olmalıdır.
Ancak, şaşırtıcı bir şekilde, GCC altında derleniyor gibi görünüyor .