汎用参照によって任意の数の引数をとり、それらを完全に無視するラムダを書いてみたいと思います。明白な方法は、可変引数ユニバーサルパラメータパックの構文を使用し、パラメータ名を省略して次のようになります。何どのようにそのパラメータを破棄する一般的なvariadicラムダを記述するのですか?
struct S { S() {} S(S const&) {} };
my_lambda("meow", 42, S{});
^ error: cannot pass objects of non-trivially-copyable type 'struct S' through '...'
:これは私がtry to pass a non trivially-copyable objectまで(GCC 4.9.2で)正常に動作
auto my_lambda = [](auto&&...) { return 42; };
やっている?私のコードは不正ですか、これは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]
がどのようにテンプレートパラメータパックに未使用のパラメータの警告を抑止しますか?
これはGCCバグのようです。それは5.2での(作品)(http://coliru.stacked-crooked.com/a/e1b37f5289b7c8ec)。 – TartanLlama
@TartanLlama「作品」の定義については、 5.2は、非自明コピー可能オブジェクトを '...'で渡すことをサポートしていますが、解析バグは修正されていません。IIRC。 –