2013-12-13 3 views
-2

최신 인텔 C++ 컴파일러는 14.0.1.139 또는 인텔 병렬 스튜디오 xe 2013 sp1 업데이트 1입니다. 암시 적 이동 생성자 및 이동 할당을 지원하는지 궁금합니다. 다음 코드를 테스트했는데 작동하지 않는 것 같습니다.최신 Intel C++ 컴파일러는 암시 적 이동 생성자와 이동 할당을 지원합니까?

관련 기사는 here (검색 이동 생성자)입니다. 그것은 그것이지지한다고 말했다. 그러나 나는 그것을 만들 수 없습니다.

#include <memory> 
#include <iostream> 
#include <algorithm> 

using namespace std; 

class A 
{ 
public: 
    unique_ptr<int> m; 
}; 

int main() 
{ 
    A a; 
    A b(std::move(a)); 
} 

은 기본적으로 주요 기능 A b(std::move(a));의 두번째 라인은 이동 생성자 A::A(const A &&) 이외의 복사 생성자 A::A(const A &)을 찾고

icl main.cpp /Qstd=c++11 

오류

main.cpp 
main.cpp(10): error #373: "std::unique_ptr<_Ty, _Dx>::unique_ptr(const 
    std::unique_ptr<_Ty, _Dx>::_Myt &) [with _Ty=int, _Dx=std::default_delete<int>]" 
    (declared at line 1447 of "C:\Program Files (x86)\Microsoft Visual Studio 
    11.0\VC\include\memory") is inaccessible unique_ptr<int> m; 
                  ^
detected during implicit generation of "A::A(const A &)" at line 16 
compilation aborted for main.cpp (code 2) 

으로 창에 컴파일. 이것은 암시 적 이동 생성자가 생성되지 않는 경우 일반적입니다. 그러나 컴파일러는 암시 적 이동 생성자를 지원한다고 말했습니다. 나는 혼란 스럽다. 감사.

+1

당신은 여기에서 볼 수 http://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler – ForEveR

+1

관련 문서는 http://software.intel.com/en-us/articles/intel-composer-xe-2013-compilers-sp1-fixes-list입니다. 그것은 그것이 지원한다고 말했다. 그러나 나는 그것을 만들 수 없습니다. – user1899020

+0

"작동하지 않는 것"은 무엇을 의미합니까? – juanchopanza

답변

2

대답 1 : Windows 환경에서

비주얼 스튜디오 2010 인텔 C++ 컴파일러를 사용하여 * 또는 2012 *, 비주얼 C에서 지원하는 C++ 11 개 기능 ++ 2,012분의 2,010은 기본적으로 활성화되어 있습니다. "/ Qstd = C++ 11"을 사용하면 다른 모든 경우에 대해 을 지원합니다. Linux 또는 Mac OS X 환경에서는 "-std = C++ 11"을 사용하십시오.

대답이

http://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler에서 (때문에 정보의 부족으로 추측) : 플래그가 설정되어 경우 std::move가 정의 <algorithm>를 포함해야합니다.

Answer 3 : 업데이트 된 코드는 GCC와 Clang으로 잘 컴파일됩니다. 어쩌면 당신은 명시 적으로 이동 생성자를 정의해야합니다 :

#include <memory> 
#include <iostream> 
#include <algorithm> 

using namespace std; 

class A 
{ 
public: 
    // default constructor 
    A() 
    {} 
    // move constructor 
    A(A&& rhs) 
    : m(std::move(rhs.m)) 
    {} 

    unique_ptr<int> m; 
}; 

int main() 
{ 
    A a; 
    A b(std::move(a)); 
} 
+0

이미 이러한 옵션을 설정했습니다. 컴파일러는 여전히 오류를보고합니다. – user1899020

+0

나는 당신이 당신의 질문을 편집하고이 정보를 추가하지 않는 한 누구도 알지 못합니다. 질문에 대한 내 의견을 오류 메시지의 내용을 참조하십시오. 귀하의 질문에 도움이되지 않습니다 그리고 나는 그것을 downvote거야. – usr1234567

+0

을 포함하십시오. 여전히 오류를보고합니다. 혹시 인텔 C++에서 사용해 보셨습니까? 모든 운영 체제가 좋습니다. 나는 창문을 사용하고있다. – user1899020