首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:命名空间'std‘中没有名为'invoke_result_t’的类型,gcc-7

错误:命名空间'std‘中没有名为'invoke_result_t’的类型,gcc-7
EN

Stack Overflow用户
提问于 2018-04-28 23:30:24
回答 1查看 294关注 0票数 1

我的cmake文件:

代码语言:javascript
复制
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})

幸运的是,我查看了生成的编译器命令

代码语言:javascript
复制
/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。我没有兴趣研究长时间的工作,那是什么,为什么它会在那里当我

代码语言:javascript
复制
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

它怀疑-std=gnu++1z不是一个稳定、完成库或其他东西。但是,gcc 7支持c++17标准的大部分功能。

当我不知道它应该可以工作时,我手动将生成的命令参数替换为-std=gnu++17,它就工作了。怎么了?我如何让它在cmake中工作?

EN

回答 1

Stack Overflow用户

发布于 2018-04-29 00:13:32

我使用的是第三种方法,它被标记为how to specify compiler in cmake。第一种方法是设置CXX环境变量不起作用(编译器是一些Mac g++)。所以我尝试了第二种方法--在cmake args -D CMAKE_C_COMPILER=gcc-7中指定编译器,它起作用了。即使再次生成c++1z参数。我不明白,但在我崩溃之前我是很好的。

代码语言:javascript
复制
/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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50078146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档