2013-12-13 69 views
-2

最新的intel 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)); 
} 

編譯它在Windows作爲

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) 

基本上在主函數A b(std::move(a));二號線正在尋找的拷貝構造函數A::A(const A &)少動構造A::A(const A &&)等。當沒有隱式移動構造函數被生成時,這是通常的。但編譯器表示它支持隱式移動構造函數。我很困惑。謝謝。

+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年的Visual Studio的 英特爾C++編譯器時,*或* 2012,採用Visual C支持C++ 11個++特性 2010/2012默認情況下啓用。使用「/ Qstd = C++ 11」打開 支持所有其他情況。在Linux或Mac OS X環境中使用 「-std = C++ 11」。

http://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler

答案2(猜測,因爲缺乏信息): 如果設置了標誌,則必須包括<algorithm>其中std::move定義。

回答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

我不知道,除非您編輯您的問題並添加此信息,否則其他任何人都不知道。另見我對你的問題的評論是什麼錯誤信息。你的問題是沒有用的,我會失望的。 – usr1234567

+0

包括。仍然報告錯誤。你有沒有在英特爾C++中嘗試它?任何操作系統都很好。我正在使用Windows。 – user1899020

相關問題