2017-01-18 3 views
0

Je suis en mesure d'établir la suite d'une std = C++ 11 code requis avec g ++ en utilisant la commande suivante:erreur avec le compilateur Intel C: identificateur "_Compare" est indéfini

g++ test.cpp -std=c++11 -Wl,-rpath,/share/apps/gcc/6.3.0/lib64

le code suivant:

#include <chrono> 
#include <map> 
#include <memory> 
#include <thread> 
#include <utility> 
int main() { 
    typedef std::unique_ptr<int> intPointer; 
    intPointer p(new int(10)); 
    std::map<int, std::unique_ptr<int>> m; 
    m.insert(std::make_pair(5, std::move(p))); 
    auto start = std::chrono::system_clock::now(); 
    if (std::chrono::system_clock::now() - start < std::chrono::seconds(2)) 
    { 
     std::thread t; 
    } 
} 

la commande même (sans doute que je ne sais pas le bon) de ne fonctionnera pas pour compilateur intel:

icpc test.cpp -std=c++11 -Wl,-rpath,/share/apps/intel/2016.1.056/vtune_amplifier_xe_2016.1.1.434111/target/linux64/lib64 

L'erreur est:

In file included from /share/apps/gcc/6.3.0/include/c++/6.3.0/map(60), 
      from test.cpp(2): 
/share/apps/gcc/6.3.0/include/c++/6.3.0/bits/stl_tree.h(1437): 
error: identifier "_Compare" is undefined 
    && is_nothrow_move_assignable<_Compare>::value) 
           ^

In file included from /share/apps/gcc/6.3.0/include/c++/6.3.0/map(60), 
      from test.cpp(2): 
/share/apps/gcc/6.3.0/include/c++/6.3.0/bits/stl_tree.h(1778): 
error: identifier "_Compare" is undefined 
    _GLIBCXX_NOEXCEPT_IF(__is_nothrow_swappable<_Compare>::value) 
^

Qu'est-ce que je fais mal, et comment dois-je résoudre ce problème.

+2

Est-il normal que votre compilateur Intel utilise les en-têtes GCC? J'ai le sentiment que ça ne va pas marcher. Peut-être que vous devriez utiliser l'équivalent Intel de même. – tadman

+0

Eh bien, le morceau de code n'est pas écrit par moi. Cela fait partie d'un test pour compiler un plus gros logiciel. Si ce code ne renvoie pas d'erreur, il me laisse compiler. Changer le code n'est donc pas ce que je peux faire. c'est solide et donné. – Eisa

+0

Vous dites cela et pourtant votre compilateur n'est pas d'accord. Chaque fournisseur a sa propre implémentation de la bibliothèque standard et vous ne pouvez pas mélanger arbitrairement les en-têtes avec les compilateurs. – tadman

Répondre

0

Eh bien j'ai vérifié avec des agents Intel et il est apparu que Intel 16 ne prennent pas en charge gcc6.3, le soutien vient Intel 17.

1

D'après les commentaires ci-dessus:

_Compare est l'un des paramètres du modèle du _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc> défini dans ce fichier, aussi sûrement qu'il est défini.

Une raison plus probable est que le compilateur Intel ne connaît peut-être pas is_nothrow_move_assignable qui est récemment ajouté au type_traits.

2

J'avais un utilisateur avec une difficulté similaire à C++ en utilisant les en-têtes gcc-6.3.0 et le compilateur Intel 16.1.150. J'ai opté pour la théorie du bug du compilateur, essayé avec le compilateur Intel 17 et les choses ont fonctionné. -doug