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);
X
bir dizi kabı nerede :
T
olacaktırEmplaceConstructible
içineX
gelen*i
.
Ancak, önceki paragrafta şöyle belirtilmektedir:
i
vej
girdi 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 .