带有 gcc 7.1/8.1 的英特尔编译器 17.0

Intel compiler 17.0 with gcc 7.1/8.1

 /opt/intel/compilers_and_libraries_2017.2.174/linux/bin/intel64/icpc    -I/home/usermy/.conan/data/toolchain/1.0.5-g0a9b008/demo/test/package/c62a7e8ca4353a55148d1aa65d313056ef6659b2/include -I/home/usermy/.conan/data/PracticalSocket/1.3.9-g2de8945.M/demo/test/build/bf3ccdb63142bb66a24f13901c58796a91e7542e/include  -fvar-tracking -g -static-intel -ftz -fma -use-intel-optimized-headers -axAVX,AVX2,SSE4.2,CORE-AVX512 -xSSE4.2  -std=c++17 -O3 -gcc-name=/usr/gcc-8.1/bin/gcc -gxx-name=/usr/gcc-8.1/bin/g++ -O3 -DNDEBUG   -o CMakeFiles/practical_socket.dir/src/PracticalSocket.cpp.o -c /home/usermy/.conan/data/PracticalSocket/1.3.9-g2de8945.M/demo/test/build/bf3ccdb63142bb66a24f13901c58796a91e7542e/src/PracticalSocket.cpp
In file included from /usr/gcc-8.1/include/c++/8.1.0/bits/move.h(55),
                 from /usr/gcc-8.1/include/c++/8.1.0/bits/stl_pair.h(59),
                 from /usr/gcc-8.1/include/c++/8.1.0/bits/stl_algobase.h(64),
                 from /usr/gcc-8.1/include/c++/8.1.0/bits/char_traits.h(39),
                 from /usr/gcc-8.1/include/c++/8.1.0/string(40),
                 from /home/usermy/.conan/data/PracticalSocket/1.3.9-g2de8945.M/demo/test/build/bf3ccdb63142bb66a24f13901c58796a91e7542e/include/PracticalSocket.h(4),
                 from /home/usermy/.conan/data/PracticalSocket/1.3.9-g2de8945.M/demo/test/build/bf3ccdb63142bb66a24f13901c58796a91e7542e/src/PracticalSocket.cpp(1):
/usr/gcc-8.1/include/c++/8.1.0/type_traits(1061): error: identifier "__is_assignable" is undefined
        : public __bool_constant<__is_assignable(_Tp, _Up)>
                                 ^

In file included from /usr/gcc-8.1/include/c++/8.1.0/bits/move.h(55),
                 from /usr/gcc-8.1/include/c++/8.1.0/bits/stl_pair.h(59),
                 from /usr/gcc-8.1/include/c++/8.1.0/bits/stl_algobase.h(64),
                 from /usr/gcc-8.1/include/c++/8.1.0/bits/char_traits.h(39),
                 from /usr/gcc-8.1/include/c++/8.1.0/string(40),
                 from /home/usermy/.conan/data/PracticalSocket/1.3.9-g2de8945.M/demo/test/build/bf3ccdb63142bb66a24f13901c58796a91e7542e/include/PracticalSocket.h(4),
                 from /home/usermy/.conan/data/PracticalSocket/1.3.9-g2de8945.M/demo/test/build/bf3ccdb63142bb66a24f13901c58796a91e7542e/src/PracticalSocket.cpp(1):
/usr/gcc-8.1/include/c++/8.1.0/type_traits(1061): error: type name is not allowed
        : public __bool_constant<__is_assignable(_Tp, _Up)>

这是在 cmake 中添加以下内容后的结果:

  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O3 -gcc-name=/usr/gcc-8.1/bin/gcc -gxx-name=/usr/gcc-8.1/bin/g++")

如果您阅读发行说明,您会注意到 Intel C++ 17 不支持 gcc 7/8(我不会因为您没有看那个而评判您):

https://software.intel.com/en-us/articles/intel-c-compiler-170-for-linux-release-notes-for-intel-parallel-studio-xe-2017

请注意,Intel 只提供编译器而不提供标准库,它从 gcc 中获取,因此存在兼容性限制。

注意,版本 18 也不支持它,希望 19 会附带它。