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

时间:2018-04-28 15:30:24

标签: c++ cmake c++17

我的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。我没有兴趣长时间研究f * ck是什么以及为什么它在那里

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

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

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

1 个答案:

答案 0 :(得分:0)

参见how to specify compiler in cmake 我正在使用标记为avoid的第三种方法。 第一种方法,即设置curl -X PUT http://127.0.0.1:5984/shop/_design/product_validation -d '{"validate_doc_update": "function(newDoc, oldDoc, userCtx) { if (newDoc.type == \"product\") { if (!newDoc[\"name\"]) { throw({forbidden: \"missing name\"}) } } }"}' env var不起作用(编译器是一些Mac g ++)。 所以我尝试了第二种方法 - 在cmake args CXX中指定编译器,这是有效的。即使再次生成c ++ 1z参数。我不明白,但在我休息之前我很好。

-D CMAKE_C_COMPILER=gcc-7