임시 테이블에서 쌍을 구성하려고합니다. 내가 이해하는 것으로부터 std :: pair는 필요한 생성자를 제공하지만 작동하게 만들 수는 없다. 내가 clang++-3.8 --std=c++14
이것을 컴파일하려고임시 테이블에서 쌍 만들기
#include <utility>
struct Test {
Test() : a(1.0) {}
private:
double a;
Test(Test&&) = default;
Test(const Test&) = delete;
Test& operator=(Test&&) = delete;
};
int main (int argc, char** argv) {
std::pair<Test, double> result(Test(), 0.0);
}
: 이것은 내 최소한의 예입니다. Test의 복사본 생성자가 쌍으로 호출됩니다. 삭제되었으므로 오류 call to deleted constructor of 'Test'
이 표시됩니다. gcc와 유사한 오류가 발생하기 때문에 컴파일러에서 문제가되는 것 같지 않습니다 (https://ideone.com/n5GOeR 참조).
누군가 위의 코드가 컴파일되지 않는 이유를 설명 할 수 있습니까?
는
'테스트'를 복사하거나 이동할 방법이 없기 때문에'std :: pair'의 생성자가 어떻게 할 것으로 기대합니까? – Quentin
나는'Test'에 대한 이동 생성자를 명시 적으로 활성화하려고했습니다. – user3910279
일단 이동 생성자를'public' 섹션에 넣으면 [잘 작동합니다] (http://coliru.stacked-crooked.com/a/77a1983a12219dfc). – Quentin