从Qt 5.6切换到Qt 5.7 - "no member 'make_unique' in namespace std"

switching from Qt 5.6 to Qt 5.7 - "no member 'make_unique' in namespace std"

本文关键字:Qt make in std namespace unique no member      更新时间:2023-10-16

我有一个CMake Qt项目,它使用了几个c++14功能,包括std::make_unique。通常情况下,这将由以下任一方处理:

LIST(APPEND CMAKE_CXX_FLAGS -std=c++14)

ADD_COMPILE_OPTIONS(-std=c++14)

我想将项目从5.6版本升级到5.7版本,但在测试构建过程中出现了多个错误

命名空间std 中没有成员"make_unique"

我已经验证了所有合适的头和编译选项都已到位,并排除了任何环境问题。使用Qt 5.7肯定是个问题。有什么变通办法吗?

所以这是CMake/Qt 5.7的一个已知问题。显然,自从CMake 3.1以来,定义在CMake中使用哪个C++标准的正确方法是使用

SET(CMAKE_CXX_STANDARD 14)

从Qt 5.7开始,对CMAKE_CXX_STANDARD使用除以外的任何方法都将导致c++14错误,如问题中所述。使用这个方法为我的构建清除了所有错误。

有趣的是,这个错误报告读起来很有趣,因为最初这个问题被认为是一个发布阻塞,然后降级为已知问题,最终(似乎)甚至从已知问题列表中清除。