最近,通过查看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
(我在CONFIG += C++14
文件中使用.pro
,但这是库的问题。)
我是否必须重建libc ++才能在Qt中使用C ++功能(如std::move
)?或者我可能需要更改一些设置?
我使用Qt 5.7和LLVM 7.3.0。
答案 0 :(得分:1)
Qt使用默认情况下LLVM正在使用的标准库。这个问题与Qt无关,你用LLVM编译的任何东西都会遇到同样的问题。很可能你的LLVM安装很糟糕。
答案 1 :(得分:0)
我以前见过这么多次。您目前正在使用libstdc ++ v4.2等。您需要添加-stdlib = libc ++。然后C ++ 14将开始工作。