#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; }
Что я могу сделать, чтобы избавиться от этого предупреждения?
Комментарии:
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).