最近,通过查看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一起使用。
最佳答案
Qt默认使用LLVM使用的任何标准库。这个问题与Qt无关,用LLVM编译的任何内容都会遇到相同的问题。您的LLVM安装很可能失败了。
关于c++ - Qt不使用C++ 14标准库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39168728/