ユニバーサル参照によって任意の数の引数を取り、それらを完全に無視するラムダを書きたいと思います。明らかな方法は、可変長ユニバーサル パラメーター パックの構文を使用し、パラメーター名を省略することです。
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]
テンプレート パラメーター パックの未使用パラメーターの警告をどのように抑制しますか?