Boost.Beast C4702 «недоступен» предупреждение компилятора о сборке MSVC ++

При сборке с Boost-1.67.0 и VS в Windows я получаю предупреждение о недоступности C4702 для boost::beast::http::detail::verb_to_string(verb v), в boost/beast/http/impl/verb.ipp:

template<class = void>
inline string_view verb_to_string(verb v)
{
switch(v)
{
case verb::delete_:       return "DELETE";
case verb::get:           return "GET";
case verb::head:          return "HEAD";
case verb::post:          return "POST";
case verb::put:           return "PUT";
case verb::connect:       return "CONNECT";
o o o
case verb::unknown:
return "<unknown>";
}

BOOST_THROW_EXCEPTION(std::invalid_argument{"unknown verb"});

// Help some compilers which don't know the next line is
// unreachable, otherwise spurious warnings are generated.
return "<unknown>";
}

Последний (внизу) return "<unknown>"; был добавлен, чтобы успокоить компиляторы, недостаточно умные, чтобы знать, что выброшенное исключение препятствует нормальному возврату; однако та же самая строка кода проблематична для (более умной) Visual Studio, которая помечает оператор как недоступный (C4702). В моем случае мы переводим предупреждения компилятора в ошибки, так что это больше, чем просто раздражает.

Следующий взлом требует вдохновения от ответа @ DanielSeither на Отключить одно предупреждение об ошибке, и похоже на работу

//
// Filename: boost_beast_http.hpp-no-c4702
//
// i.e. #include "boost_beast_http.hpp-no-c4702"//
// Should appear before any other boost/beast header.
//

#if defined(OS_WIN32) || defined(OS_WIN64)

#ifndef BOOST_BEAST_HTTP_VERB_HPP
#define BOOST_BEAST_HTTP_IMPL_VERB_IPP
#include <boost/beast/http/verb.hpp>
#undef  BOOST_BEAST_HTTP_IMPL_VERB_IPP
#pragma warning( push )
#pragma warning( disable : 4702 )
#include <boost/beast/http/impl/verb.ipp>
#pragma warning( pop )
#endif

#endif

#include <boost/beast/http.hpp>

но если не считать исправления исходного кода для сборок Microsoft VC ++, кто-то может предложить лучший обходной путь?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]