Что означает эта ошибка и что мне нужно сделать, чтобы исправить ее?
В вашем коде нет ничего плохого, насколько я понимаю.
Я подозреваю, что g ++ ошибка.
Чтобы исправить это ... хорошо ... к go вокруг него ... не спрашивайте меня, почему, но я вижу, что для обоих компиляторов работает, требуется первый параметр шаблона, прежде чем список variadi c для Merged
.
Я имею в виду следующее struct
template <typename B0, typename ... B>
struct Merged : public B0, public B ...
{
template <typename T0, typename ... T>
Merged (T0 && t0, T && ... t)
: B0{std::forward<T0>(t0)}, B{std::forward<T>(t)}...
{ }
using B0::operator();
using B::operator()...;
};
вместе со следующим руководством по выводам
template <typename T0, typename ... T>
Merged (T0, T ...)
-> Merged<std::decay_t<T0>, std::decay_t<T>...>;
работает с обоими компиляторами.
Также ваше оригинальное руководство по выводам работает с измененными struct
.
- EDIT -
Я вижу, что Вы также можете решить проблему (компиляция с обоими компиляторами), поддерживая struct
только с списком переменных c
template <typename ... B>
struct Merged: public B ...
{
template <typename ... T>
Merged (T && ... t)
: B{std::forward<T>(t)}...
{ }
using B::operator()...;
};
и используя руководство по выводу с обязательным аргументом
template <typename T0, typename ... T>
Merged (T0, T ...)
-> Merged<std::decay_t<T0>, std::decay_t<T>...>;