다음 프로그램이 제대로 구성되어 있습니까?
#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에서 컴파일되는 것 같습니다 .