2017-10-06 64 views
0

我在使用宏_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

+1

這只是一個警告,它看起來完全是多餘的 - 我們沒有理由對於從屬名稱必然是一個類型。我建議禁用它。 – Quentin

+0

@Quentin不,它不是多餘的。這是微軟告訴你的方式[你可能需要typename關鍵字](https://stackoverflow.com/questions/1600936/officially-what-is-typename-for)。 –

+0

請提供[mcve]。 – rustyx

回答

0

對於此問題的解決方法是定義:JUCE_COMPILER_SUPPORTS_NOEXCEPT=1

相關問題