Задано несколько конструкторов копирования Boost Spirit X3 - PullRequest
2 голосов
/ 20 апреля 2019

У меня раздражающее предупреждение при наследовании от x3 :: варианта с использованием 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 / а / 0f4f496a0a18eee4

Ответы [ 2 ]

0 голосов
/ 21 апреля 2019

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

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

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

0 голосов
/ 20 апреля 2019

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

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