2014-01-12 4 views
1

최근에 대답하려고했던 질문은 vs2012의 C++ 11 지원에 오류가있는 것으로 보입니다.Visual Studio 2012에서 올바르게 수행합니까? std :: move

특히 std :: move 만지도에 삽입하는 데 사용되었지만 copy-constructible이 아닌 value_type으로 std :: map을 컴파일하지 못했습니다. 잘못된 삽입 오버로드가 선택되었거나 컴파일러가 대안을 고려하지 않았습니다.

1 
1 

이다

#include <iostream> 
#include <memory> 
#include <utility> 
#include <type_traits> 

class Foo { 
}; 

using namespace std; 

int main() { 
    cout << is_constructible<pair<const int,unique_ptr<Foo> >, pair<const int,unique_ptr<Foo> >& >::value << '\n'; 
    cout << is_constructible<pair<const int,unique_ptr<Foo> >, pair<const int,unique_ptr<Foo> >&& >::value << '\n'; 
} 

출력을 01

+0

가 나는 또한 Tips48 그것을 @ – Tips48

+0

이동 :: 표준을 사용하여 비주얼 스튜디오 2013와 함께 문제를 했어 당신의 질문이었습니다! 작은 세계 – user3125280

답변

1

Visual Studio 출력 (see it live)을 제공한다 :

기본적으로, 다음 코드 알고 wan't 분명히 틀렸고 gccclang 모두 예상되는 결과를 제공합니다. 이 버그와보고있는 원래 문제는이 두 가지 허용 된 버그 보고서와 관련이있을 수 있습니다. is_constructible에서 잘못된 결과 실제로 original bug에 관련이있을 수 있습니다 :

+0

죄송합니다, 조금 명확히하시기 바랍니다 : 원래 버그, 다른 대답과 마찬가지로? – user3125280

+0

컴파일러는 복사 생성자라고 생각하고 복사 생성자를 생성 할 때만 후자를 발견합니다. 괜찮습니다. 몇 가지 사례를 더 추가하겠습니다. 편집을 마치면 한 발 앞선 모습입니다. 감사합니다. 그래도 "원래 문제"는 무엇을 의미합니까? – user3125280

+0

@ user3125280 원래 이슈로 [this] (http://stackoverflow.com/questions/21056872/c-stdunique-ptr-wont-compile-in-map)을 참조하고있었습니다. –

관련 문제