我在使用宏_NOEXCEPT_PO
的STL(set,vector,deque等)中收到很多錯誤。在Visual Studio 2010中編譯的代碼相同,其STL不包含_NOEXCEPT_PO
宏。我在三臺PC上覆制了這個錯誤。是否需要了解其他預處理定義?鑑於爲什麼當Juce存在時,Visual Studio 2015無法使用「noexcept」編譯STL庫?
錯誤是:
C:\ Program Files文件(x86)的\微軟的Visual Studio 14.0 \ VC \包括\矢量:852:警告:C4346:「的std ::矢量< _Ty,_Alloc> ::的std ::矢量< _Ty,_Alloc> :: _ ALTY :: propagate_on_container_move_assignment ::值':從屬名稱不是一個類型
_Myt& operator=(_Myt&& _Right)
_NOEXCEPT_OP(_Alty::propagate_on_container_move_assignment::value
|| _Alty::is_always_equal::value)
{ // assign by moving _Right
if (this != &_Right)
{ // different, assign it
_Tidy();
if (_Alty::propagate_on_container_move_assignment::value
&& this->_Getal() != _Right._Getal())
this->_Move_alloc(_Right._Getal());
_Assign_rv(_STD forward<_Myt>(_Right));
}
return (*this);
}
_NOEXCEPT_OP
定義爲:
#define _NOEXCEPT noexcept
#define _NOEXCEPT_OP(x) noexcept(x)
編輯:
工作時將這一數字減少到一個小例子,我發現這是JUCE標頭進行的差異列入。不幸的是,錯誤信息不是很有幫助,所以我沒有意識到Juce的相關性。
對於此問題的解決方法是定義: JUCE_COMPILER_SUPPORTS_NOEXCEPT=1
這只是一個警告,它看起來完全是多餘的 - 我們沒有理由對於從屬名稱必然是一個類型。我建議禁用它。 – Quentin
@Quentin不,它不是多餘的。這是微軟告訴你的方式[你可能需要typename關鍵字](https://stackoverflow.com/questions/1600936/officially-what-is-typename-for)。 –
請提供[mcve]。 – rustyx