【发布时间】:2021-12-27 04:46:46
【问题描述】:
我收到此错误:
C:.conan\7c4aa5\1\include\absl/meta/type_traits.h(622): error C2039: 'result_of': is not a member of 'std'
在尝试编译包含Abseil 的项目时。
如果我点击错误的来源,我会看到:
#if __cplusplus >= 201703L
// std::result_of is deprecated (C++17) or removed (C++20)
template<typename> struct result_of;
template<typename F, typename... Args>
struct result_of<F(Args...)> : std::invoke_result<F, Args...> {};
#else
template<typename F> using result_of = std::result_of<F>;
#endif
顶部有一个提示,std::result_of 在 C++20 中已被删除。
在我的CMakeLists.txt 我有
set(CMAKE_CXX_STANDARD 20)
那么为什么__cplusplus >= 201703L 不是真的呢?是什么设置了这个变量?如何告诉编译器我真的想使用 C++20?
我不知道是否需要说服 Visual Studio 16/2019、CMake、CLion 或其他什么。工具链中的东西太多了,但我会添加一些屏幕截图,这样你就可以看到我的设置是什么,希望有人能指出我缺少的东西。
我完整的CMakeLists.txt 是:
cmake_minimum_required(VERSION 3.21)
set(EXE mario4ever)
project(${EXE})
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(${CMAKE_CURRENT_SOURCE_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
add_executable(${EXE} src/bootstrap.cpp)
target_link_libraries(${EXE} ${CONAN_LIBS})
add_custom_command(
TARGET ${EXE} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/resources $<TARGET_FILE_DIR:${EXE}>/resources
COMMENT "Copying shaders" VERBATIM
)
【问题讨论】:
标签: c++ windows visual-c++ cmake conan