Wie schreibe ich ein generisches variadisches Lambda, das seine Parameter verwirft?

Ich möchte ein Lambda schreiben, das eine beliebige Anzahl von Argumenten als universelle Referenz verwendet und sie vollständig ignoriert. Die naheliegende Methode wäre, die Syntax für ein universelles Parameterpaket zu verwenden und den Parameternamen wegzulassen:

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

Dies funktioniert gut (mit gcc 4.9.2), bis ich versuchen Sie, ein nicht trivial kopierbares Objekt zu übergeben:

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

Was ist los? Ist mein Code schlecht geformt oder ist das ein Fehler in gcc?

Was ist in jedem Fall die beste Lösung? Ich habe festgestellt, dass die Benennung des Parameters funktioniert, bin dann jedoch auf eine Warnung zu nicht verwendeten Parametern gestoßen:

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]

Wie unterdrücken Sie eine Warnung für nicht verwendete Parameter in einem Vorlagenparameterpaket?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage