指定了Boost Spirit X3多个副本构造函数

时间:2019-04-19 21:46:28

标签: c++ boost-spirit

在Microsoft Visual Studio 2017和2019中使用Boost 1.69.0从x3 :: variant继承时,我有一个烦人的警告:

warning C4521: 'boost::spirit::x3::variant<int>': multiple copy constructors specified
note: see reference to class template instantiation 'boost::spirit::x3::variant<int>' being compiled

这是由以下代码触发的:

#include "boost/spirit/home/x3/support/ast/variant.hpp"
struct si : boost::spirit::x3::variant<int> {};
int main() { si s; }

我该怎么做才能消除此警告?

https://coliru.stacked-crooked.com/a/0f4f496a0a18eee4

2 个答案:

答案 0 :(得分:0)

  

我该怎么做才能消除此警告?

  • 下载Boost 1.70
  • 全局禁用警告
  • 通过在Boost包含之前暂时禁用警告来抑制警告
  • 告诉您的编译器不要将Boost头当作自己的头,而是当作系统头(在GCC中,使用-isystem-includes而不是-I

答案 1 :(得分:0)

如果您必须坚持1.69.0并想在代码中对其进行修复,则可以删除spirit \ home \ x3 \ support \ ast \ variant.hpp中的第152-153行

    variant(variant& rhs) BOOST_NOEXCEPT_IF((std::is_nothrow_constructible<variant_type, variant_type&>::value))
        : var(rhs.var) {}

(因为在第149-150行中定义了另一个带有const参数的副本构造函数)。