Qt不使用C ++ 14标准库

时间:2016-08-26 14:31:30

标签: c++ qt clang c++14 libc++

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

2 个答案:

答案 0 :(得分:1)

Qt使用默认情况下LLVM正在使用的标准库。这个问题与Qt无关,你用LLVM编译的任何东西都会遇到同样的问题。很可能你的LLVM安装很糟糕。

答案 1 :(得分:0)

我以前见过这么多次。您目前正在使用libstdc ++ v4.2等。您需要添加-stdlib = libc ++。然后C ++ 14将开始工作。