Как написать общую переменную лямбду, которая отбрасывает свои параметры?

Я хочу написать лямбду, которая принимает произвольное количество аргументов по универсальной ссылке и полностью их игнорирует. Очевидным методом будет использование синтаксиса для универсального пакета параметров с переменными параметрами и опускание имени параметра:

auto my_lambda = [](auto&&...) { return 42; };

Это прекрасно работает (с GCC 4.9.2), пока япопробуйте передать нетривиально копируемый объект:

struct S { S() {} S(S const&) {} };
my_lambda("meow", 42, S{});
^ error: cannot pass objects of non-trivially-copyable type 'struct S' through '...'

В чем дело? Неправильный ли мой код, или это ошибка в gcc?

В любом случае, какой лучший обходной путь? Я обнаружил, что присвоение имени параметру работает, но затем натолкнулся на предупреждение о неиспользованном параметре:

auto my_lambda = [](auto&&... unused) { return 42; };
^ error: unused parameter 'unused#0' [-Werror=unused-parameter]
^ error: unused parameter 'unused#1' [-Werror=unused-parameter]
^ error: unused parameter 'unused#2' [-Werror=unused-parameter]

Как вы подавляете предупреждение о неиспользованном параметре в пакете параметров шаблона?

Ответы на вопрос(1)

Ваш ответ на вопрос