Когда я пытаюсь добавить для каждого элемента вектора один из каждого из пакета variadic, который он сломал, что я сделал не так? ..
Я не понимаю, чего именно вы хотите... в любом случае
С
Addable<vector<int>>{v}.add(1, 2)
вы звоните add()
с двумя аргументами.
У вас есть две версии add()
:переменная типа «один» и тот, который получает один аргумент.
Таким образом, вызывая его с двумя аргументами, только переменная соответствует
template <typename ...Us>
[[nodiscard]] constexpr T add(Us&& ...us) const
{
return (_val + ... + us);
}
но оператор +
в _val + ... + us
, где _val
- это std::vector<int>
, а значения us...
- int
с, не определено. Так что ошибка.
Если вы вызываете add()
с одним аргументом, например
Addable<vector<int>>{v}.add(2)
, код скомпилирует (вызывая версию add()
, которая управляет регистром std::vector
)но, очевидно, assert()
завершится неудачно при запуске скомпилированной программы.