2017-10-06 4 views
0

Ich bekomme viele Fehler in der STL (Set, Vektor, Deque, etc.), wo das Makro _NOEXCEPT_PO verwendet wird. Derselbe Code wird in Visual Studio 2010 korrekt kompiliert, dessen STL _NOEXCEPT_PO Makros nicht enthält. Ich habe diesen Fehler auf drei PCs repliziert. Gibt es zusätzliche Preproc-Definitionen, auf die ich achten muss?Warum kann Visual Studio 2015 die STL-Bibliothek nicht mit "noexcept" kompilieren, wenn Juce vorhanden ist?

Fehler gegeben ist:

C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ include \ vector: 852: Warnung: C4346: ‚std :: vector < _Ty, _Alloc> :: std :: vector < _Ty, _Alloc> :: _ Alty :: propagate_on_container_move_assignment :: value ': abhängig Name ist kein Typ

_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 ist definiert als:

#define _NOEXCEPT noexcept 
#define _NOEXCEPT_OP(x) noexcept(x) 

bearbeitet:

Während der Arbeit dies zu einem kleinen Beispiel zu reduzieren, fand ich, dass es die Aufnahme von Juce Header war, die den Unterschied gemacht. Leider war die Fehlermeldung nicht sehr hilfreich, daher war mir nicht bewusst, dass die Aufnahme von Juce relevant war.

Die Fehlerbehebung für dieses besondere Problem zu definieren: JUCE_COMPILER_SUPPORTS_NOEXCEPT=1

+1

Dies ist nur eine Warnung, und es sieht ganz überflüssig - es gibt keinen Grund, Für einen abhängigen Namen muss er unbedingt ein Typ sein. Ich schlage vor, es zu deaktivieren. – Quentin

+0

@Quentin nein, es ist überhaupt nicht überflüssig. Es ist juat der Microsoft-Weg, Ihnen zu sagen, dass [Sie brauchen möglicherweise das Schlüsselwort typeName] (https://stackoverflow.com/questions/1600936/officially-what-istypename-for). –

+0

Bitte geben Sie eine [mcve] an. – rustyx

Antwort

0

Die Fehlerbehebung für dieses besondere Problem zu definieren ist: JUCE_COMPILER_SUPPORTS_NOEXCEPT=1

Verwandte Themen