Указаны конструкторы множественного копирования Boost Spirit X3

#c #boost-spirit

#c #boost-spirit

Вопрос:

У меня есть раздражающее предупреждение при наследовании от x3::variant с использованием Boost 1.69.0 с Microsoft Visual Studio 2017 и 2019:

 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

Комментарии:

1. Я могу избавиться от этого, удалив конструктор копирования variant(variantamp; rhs) в variant.hpp. Но я скорее не хотел бы редактировать код boost.

2. Вы спрашиваете, как вообще подавлять предупреждения с помощью этого компилятора? Если вы не редактируете код, это, пожалуй, единственный оставшийся вариант…

Ответ №1:

Что я могу сделать, чтобы избавиться от этого предупреждения?

  • Скачать Boost 1.70
  • Отключите предупреждение глобально
  • Подавите предупреждение, временно отключив его, прежде чем Boost включит
  • Скажите компилятору, чтобы он обрабатывал заголовки Boost не как ваши собственные, а как системные заголовки (в GCC, используя -isystem-includes вместо -I )

Ответ №2:

Если вам нужно придерживаться версии 1.69.0 и вы хотите исправить это в коде, вы можете удалить строки 152-153 в spirit home x3 support ast variant.hpp

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

(Потому что в строках 149-150 определен другой конструктор копирования с аргументом const).