【发布时间】:2018-07-06 12:30:06
【问题描述】:
我在 Linux 上使用 Clang++ 6.0、CMake 3.11.4、Make 4.1。我正在使用我自己的 CMakeLists.txt 从终端编译,其中包含 set(CMAKE_CXX_STANDARD 17) 和
set(CMAKE_CXX_STANDARD_REQUIRED ON)。但是,我需要在我的项目中使用std::string_view,并且由于某种原因,clang 无法识别它。我也包括<string>。我得到的错误是:
error: no type named 'string_view' in namespace 'std'
另外,如果我尝试#include <string_view>,我会得到:
fatal error: 'string_view' file not found
我到底错过了什么? AFAIK,string_view 是 C++17 标准的一部分,并且 Clang 从 Clang 4 开始支持 C++17,而且我使用的是相对较新的 Make 和 CMake。
【问题讨论】:
-
您是否验证了编译器版本和 cmake 生成的
-std标志,例如make VERBOSE=1?如果是,您能否通过调用clang++ -std=c++17 dummy.cpp编译一个只包含<string_view>的虚拟翻译单元? -
您是否尝试过使用 CMake 而不是
set:target_compile_features(project PUBLIC cxx_std_17)? -
你确定 cmake 使用的是 Clang 吗? Linux 上的默认值通常是 GCC。
-
好的,所以我尝试在打开详细信息的情况下运行 make,并且 1. 是的,它确实使用了 clang,但是 2. 它使用了 -std=gnu++1z。
-
你确定标准库支持 C++17 吗?也可以将 clang 与非 c++17 标准库一起使用。