c++ - 错误:命名空间“std”gcc-7 中没有名为“invoke_result_t”的类型
问题描述
我的 cmake 文件:
cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_COMPILER "gcc-7")
project(invertedindex)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wconversion -O0")
set(SOURCE_FILES main.cpp inverted_index.hpp params.hpp)
add_executable(invertedindex ${SOURCE_FILES})
幸运的是我查看了生成的编译器命令
/usr/local/bin/gcc-7 -Wall -Wextra -Wconversion -O0 -std=gnu++1z -o CMakeFiles/invertedindex.dir/main.cpp.o -c /Users/adam/school/cpp/invertedindex/main.cpp
看到了-std=gnu++1z
。我没有兴趣长时间研究这他妈的是什么以及为什么当我有
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
它怀疑 -std=gnu++1z 不是一个稳定的、已完成的库或某事。但是 gcc 7 支持 c++17 标准的大部分特性。
当我害怕知道它应该工作时,我手动将生成的命令参数替换为-std=gnu++17
并且它工作了。怎么了?如何让它在 cmake 中工作?
解决方案
请参阅如何在 cmake 中指定编译器
我使用的是第三种方法,它标有避免。第一种方法,即设置CXX
env var 不起作用(编译器是一些 Mac g++)。所以我尝试了第二种方法 - 在 cmake args 中指定编译器-D CMAKE_C_COMPILER=gcc-7
,它有效。即使再次生成 c++1z 参数。我不明白它,但直到我打破我很好。
/usr/local/bin/gcc-7 -Wall -Wextra -Wconversion -O0 -g -std=gnu++1z -o CMakeFiles/invertedindex.dir/main.cpp.o -c /Users/adam/school/cpp/invertedindex/main.cpp
推荐阅读
- amazon-web-services - 从 AWS ECS 中单独账户中的私有注册表中提取容器
- c# - 从代码 ⇒ IL 或 IL ⇒ 本机代码创建的引用在哪里
- drools - Drools - 从动作值单元格调用决策表函数
- python - random.choices() 和 random.sample() 函数有什么区别?
- jmeter - 在 jmeter 中运行 beanshell 脚本时无法导入 com.paytm.merchant.CheckSumServiceHelper
- vue.js - 如何在插槽项目中向 td 添加自定义类?
- python - 无法从 C++ 中的 .dat 文件中提取实际数据?
- performance - 在 Prometheus 中添加两个值
- reactjs - 如何检查已部署的 React 应用程序的已安装包版本?
- django - 无法使用 runsslserver 启动 django 应用程序