使用Boost 1.68 / LLVM / VS2017时出现“ is_assignable”错误

ora*_*001 5 boost llvm-clang visual-studio-2017

在VS2017中切换到LLVM工具集以使用Boost 1.68构建代码时,我收到以下构建错误。该代码可以使用MSVC编译器很好地构建。1> C:\ boost_1_68_0 \ boost / type_traits / has_trivial_move_assign.hpp(49):错误:没有名为“ is_assignable”的模板;您是说'std :: is_assignable'吗?1> C:\ boost_1_68_0 \ boost / type_traits / intrinsics.hpp(233):注意:从宏“ BOOST_HAS_TRIVIAL_MOVE_ASSIGN”扩展

Chr*_*ern 3

我认为你的问题可能是与 ID 编译器__clang有关。__clang__根据使用的前端,Clang 有不同的预定义宏。由于这种混乱,您的 boost 可能无法包含boost/type_traits/is_assignable.hpp定义is_assignable您所缺少的标头。试试这个:在 boost/type_traits/has_trivial_move_assign.hpp 中添加|| defined(__clang__)测试 clang 的行

#if defined(__GNUC__) || defined(__clang)
#include <boost/type_traits/is_assignable.hpp>
Run Code Online (Sandbox Code Playgroud)

使:

#if defined(__GNUC__) || defined(__clang) || defined(__clang__) 
#include <boost/type_traits/is_assignable.hpp>
Run Code Online (Sandbox Code Playgroud)

然后,Boost 应该包含 is_assignable.hpp 和构建。