考慮下面的代碼:刪除構造 - MSVC報告錯誤,鏘不
class SILPassPipelinePlan final {
public:
SILPassPipelinePlan() = default;
~SILPassPipelinePlan() = default;
SILPassPipelinePlan(const SILPassPipelinePlan &) = default;
SILPassPipelinePlan(SILPassPipelinePlan &&) = delete;
SILPassPipelinePlan x() {
SILPassPipelinePlan P;
return P;
}
};
int main() {
return 0;
}
MSVC報告以下錯誤:
1>consoleapplication2.cpp(13): error C2280: 'SILPassPipelinePlan::SILPassPipelinePlan(SILPassPipelinePlan &&)': attempting to reference a deleted function
1>consoleapplication2.cpp(8): note: see declaration of 'SILPassPipelinePlan::SILPassPipelinePlan'
鏘和GCC沒有。
從規範的角度來看,哪個編譯器是正確的?這是一個MSVC錯誤還是一個叮鐺聲?
MSVC來自最新的Visual Studio 2015 Update 3,Clang的版本是3.9.0。
你在傳遞給Clang和GCC的是哪個'-std'標誌?移動構造函數的刪除在C++ 11和C++ 14之間經歷了重要的變化。 – Angew
@Angew沒有特定的標誌。試試這裏:http://rextester.com/WJMW74714 –
基於rextester鏈接,你正在使用'-std = C++ 14'。您應該將此信息添加到問題中。 – Angew