- error C2440: “=”: 无法从“_Ty”转换为“T”
// qhashfunctions.h // like std::exchange template <typename T, typename U = T> Q_DECL_RELAXED_CONSTEXPR T qExchange(T &t, U &&newValue) { T old = std::move(t); t = std::forward<U>(newValue); // here return old; }
- error C2440: “reinterpret_cast”: 无法从“int”转换为“quintptr”
// qglobal.h Q_DECL_CONST_FUNCTION inline uint qHash(std::nullptr_t, uint seed = 0) noexcept { return qHash(reinterpret_cast<quintptr>(nullptr), seed);// here }
排查了好久,提示无法从int
转换为qunitptr
,可是nullptr
怎么是int
呢?
最终发现httpglobal.h发现有重定义nullptr
,问题就出在这个为什么导致重定义上?
问题就出在这个__cplusplus
上,查阅资料发现,这个是vs的历史遗留问题,增加编译选项/Zc:__cplusplus
即可
CMake中增加编译选项:
if(MSVC) target_compile_options(${APP_NAME} PUBLIC "/Zc:__cplusplus") endif()