Ошибка компиляции Boost Beast

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, но странно видеть ошибку компиляции в релизной версии библиотеки. (Я не являюсь автором либ, просто пытаюсь ее использовать).

Может мне не хватает каких-то параметров компиляции или флагов? Кто-нибудь понял, в чем проблема и как ее решить?

Уже проверяли багтрекер?

Ulrich Eckhardt 16.05.2018 08:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
509
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Думаю, это должно быть:

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); Компилятор Юрия это устраивает, так как это находится внутри определения класса. Я считаю, что ваш компилятор вышел за рамки того, что предусмотрено стандартом.

Sean F 16.05.2018 19:03

Но это правильно компилируется во многих версиях gcc и многих версиях clang: boost.org/development/tests/master/developer/beast.html

Vinnie Falco 16.05.2018 19:23

Да, я не уверен, что я прав, и даже если бы я был прав, это не означает, что все эти компиляторы ошибаются, но я думаю, что это может объяснить, почему компилятор Юрия ведет себя по-другому.

Sean F 16.05.2018 20:26

Другие вопросы по теме