d: \ boost \ boost \ beast \ core \ detail \ ostream.hpp (263): ошибка C2955: 'boost :: beast :: detail :: ostream_helper': для использования шаблона класса требуется список аргументов шаблона
При компиляции примера проекта: http_server_small.cpp (от "зверь")
boost \ beast \ core \ detail \ ostream.hpp:
template<class DynamicBuffer, class CharT, class Traits>
ostream_helper<DynamicBuffer, CharT, Traits, true>::
ostream_helper(
ostream_helper&& other)
: std::basic_ostream<CharT, Traits>(&osb_)
, osb_(std::move(other.osb_))
{
}
Версия Boost 1.67.00, скомпилированная под Visual Studio v171 (2017), x64
Похоже на ошибку в boost / beast lib, но странно видеть ошибку компиляции в релизной версии библиотеки. (Я не являюсь автором либ, просто пытаюсь ее использовать).
Может мне не хватает каких-то параметров компиляции или флагов? Кто-нибудь понял, в чем проблема и как ее решить?





Думаю, это должно быть:
template<class DynamicBuffer, class CharT, class Traits>
ostream_helper<DynamicBuffer, CharT, Traits, true>::
ostream_helper(
ostream_helper<DynamicBuffer, CharT, Traits, true>&& other)
: std::basic_ostream<CharT, Traits>(&osb_)
, osb_(std::move(other.osb_))
{
}
Не могу понять, как компилятор допустил бы иначе.
Это похоже на проблему конфигурации с вашей стороны, потому что 1. Да, это действительный C++, 2. У меня нет проблем с компиляцией с использованием последней версии Visual Studio 2017 во всех конфигурациях и 3. Скрипты AppVeyor регулярно компилируют библиотеку и примеры, и у вас нет проблем с компиляцией: https://ci.appveyor.com/project/vinniefalco/beast/history
Проблема здесь может заключаться в том, что это определение члена не появляется внутри определения класса шаблона. В других вопросах я вижу, что люди ссылаются на 14.6.2.1 в стандарте C++ 11. Это означает, что вы можете использовать внедренное имя класса внутри определения класса шаблона. Но здесь функция-член определяется снаружи, а не внутри. Фактически, в том же файле вы можете увидеть исходное определение выше: ostream_helper (ostream_helper && other); Компилятор Юрия это устраивает, так как это находится внутри определения класса. Я считаю, что ваш компилятор вышел за рамки того, что предусмотрено стандартом.
Но это правильно компилируется во многих версиях gcc и многих версиях clang: boost.org/development/tests/master/developer/beast.html
Да, я не уверен, что я прав, и даже если бы я был прав, это не означает, что все эти компиляторы ошибаются, но я думаю, что это может объяснить, почему компилятор Юрия ведет себя по-другому.
Уже проверяли багтрекер?