次のプログラムは整形式ですか?
#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
表すイテレータは入力イテレータの要件を満たすとに暗黙的に変換要素を指しvalue_type
、
したがって、両方の要件が満たされる必要があるように思えます:範囲の値の型は、コンテナーの値の型に暗黙的に変換可能で EmplaceConstructible
なければならず、満たす必要があります(つまり、アロケーターは必要な初期化を実行できる必要があります) 。以来int
に暗黙的に変換できませんA
、このプログラムは、病気に形成されなければなりません。
ただし、驚くべきことに、GCCでコンパイルされているようです。