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

error: no type named 'invoke_result_t' in namespace 'std' gcc-7

本文关键字:result invoke GCC-7 类型 命名空间 std 错误      更新时间:2023-10-16

我的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不是稳定,成品库或STH。但是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