错误:命名空间"std"中没有名为"invoke_result_t"的类型 GCC-7
error: no type named 'invoke_result_t' in namespace 'std' gcc-7
我的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
相关文章:
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 叮当声:折叠表情和"expression result unused"警告
- 指向std::invoke中成员函数对象的指针
- 将指向数据成员的指针传递给 std::invoke 时有哪些用例和有用性?
- 为什么"std::all_of"不使用"std::invoke"?
- 在通过 P/Invoke 获取的 C++ 结构上设置 C# 回调
- 为什么 std::invoke 不处理函数重载
- ATL COM - EnumWindows 回调函数不适用于 IDispatch::Invoke
- 错误 C4700:使用未初始化的局部变量'result'
- boost_asio_handler_invoke_helpers::invoke 是否仍然是在 boost asio
- 错误 C2893 无法专门化函数模板'unknown-type std::invoke(_Callable &&,_Types &&...)'
- 无法专用化函数模板'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)'
- 无法通过 std::ref() 使用 auto& 参数调用 std::invoke()
- C 17结合了std :: async和std :: Invoke
- C++:创建线程时出现问题;错误 C2672:"std::invoke":找不到匹配的重载函数
- What is std::invoke in c++?
- Invoke JNI_OnLoad from Delphi
- std::is_invocable 是假的,但 std::invoke 有效
- 使用 P/Invoke 时存储非托管代码的数据
- "Control reaches end on non-void function" with do { return result; } while(condition);