Qt不使用c++ 14标准库

Qt does not use C++14 Standard Library

本文关键字:标准 c++ Qt      更新时间:2023-10-16

最近,通过查看std::move的源代码,我发现Qt将我的程序链接到一个不支持c++ 11/14特性的标准库版本:

#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
template <class _Tp>
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
typename remove_reference<_Tp>::type&&
move(_Tp&& __t) _NOEXCEPT
{
    typedef typename remove_reference<_Tp>::type _Up;
    return static_cast<_Up&&>(__t);
}
#else  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
template <class _Tp>
inline _LIBCPP_INLINE_VISIBILITY
_Tp&
move(_Tp& __t)
{
    return __t;
}
template <class _Tp>
inline _LIBCPP_INLINE_VISIBILITY
const _Tp&
move(const _Tp& __t)
{
    return __t;
}
#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES

实际上,宏_LIBCPP_HAS_NO_RVALUE_REFERENCES是定义的(我在我的.pro文件中使用CONFIG += C++14,但这是库的问题)。

我必须重建libc++,以便使用c++功能(如适当的std::move)与Qt?或者我需要修改一些设置?

我使用Qt 5.7和LLVM 7.3.0。

Qt使用您的LLVM默认使用的任何标准库。这个问题与Qt无关,你用LLVM编译的任何东西都会遇到同样的问题。

这种情况我见过很多次了。您目前包含libstdc++ v4.2或其他东西。您需要添加-stdlib=libc++。然后c++ 14开始工作