最近,通过查看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/

10-11 22:54
查看更多