2017-10-06 8 views
0

Je reçois beaucoup d'erreurs dans la STL (set, vector, deque, etc.) où la macro _NOEXCEPT_PO est utilisée. Le même code compile correctement dans Visual Studio 2010, dont STL n'inclut pas les macros _NOEXCEPT_PO. J'ai répliqué cette erreur sur trois ordinateurs. Y a-t-il d'autres définitions de préproc dont je dois être conscient?Pourquoi Visual Studio 2015 ne parvient pas à compiler STL lib avec "noexcept" lorsque Juce est présent?

erreur donnée est:

C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ include \ vecteur: 852: avertissement: C4346: « std :: vector < _Ty, _Alloc> :: std :: vector < _Ty, _Alloc> :: _ Alty :: :: propagate_on_container_move_assignment valeur ': nom dépendante n'est pas un type

_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 est défini comme:

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

Modifier:

Tout en travaillant à réduire à un petit exemple, je l'ai trouvé qu'il était l'inclusion des en-têtes Juce qui ont fait la différence. Malheureusement, le message d'erreur n'a pas été très utile, donc je n'ai pas réalisé que l'inclusion de Juce était pertinente.

Le correctif de ce problème particulier est de définir: JUCE_COMPILER_SUPPORTS_NOEXCEPT=1

+1

Ceci est seulement un avertissement, et il semble tout à fait superflu - il n'y a aucune raison pour qu'un nom dépendant soit nécessairement un type. Je suggère de le désactiver. – Quentin

+0

@Quentin non, ce n'est pas superflu du tout. C'est la manière de Microsoft de vous dire que [vous pouvez avoir besoin du mot-clé typename] (https://stackoverflow.com/questions/1600936/officially-what-is-typename-for). –

+0

Veuillez fournir un [mcve]. – rustyx

Répondre

0

Le correctif de ce problème particulier est de définir: JUCE_COMPILER_SUPPORTS_NOEXCEPT=1