我可以使用以下命令使用g ++编译以下std = c ++ 11所需代码:
g++ test.cpp -std=c++11 -Wl,-rpath,/share/apps/gcc/6.3.0/lib64
代码:
#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;
}
}
同样的命令(可能我不知道正确的命令)不适用于英特尔编译器:
icpc test.cpp -std=c++11 -Wl,-rpath,/share/apps/intel/2016.1.056/vtune_amplifier_xe_2016.1.1.434111/target/linux64/lib64
错误是:
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)
^
我做错了什么,我应该如何解决这个问题。
答案 0 :(得分:2)
来自上述评论:
_Compare
是该文件中定义的_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>
的模板参数之一,因此肯定已定义。
更可能的原因是英特尔编译器可能不知道最近添加到type_traits的is_nothrow_move_assignable
。
答案 1 :(得分:2)
我有一个使用gcc-6.3.0标头和Intel 16.1.150编译器的c ++难度相似的用户。我选择了编译器错误理论,尝试使用Intel 17编译器并且工作正常。 -doug
答案 2 :(得分:0)
我检查过英特尔代理商,结果证明Intel 16不支持gcc6.3,支持来自Intel 17。