C++ の可変引数リストに non trivial な値を渡すとコンパイルエラーになる
以下のようなコードを Clang でコンパイルしたところエラーになりました。
[](...){}(std::string("homu")); // error: cannot pass object of non-trivial type 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') through variadic method; call will abort at runtime [-Wnon-pod-varargs]
gcc だと問題なかったのでなんでだろーと思って調べていたらどうやら未定義の動作みたい。
参照:可変引数リストと非PODクラス型の関係 - yohhoyの日記
件のコードだとラムダ式ですが、通常の関数定義も同様です。
ちなみに variadic template として受け取れば回避出来ました。
[](auto...){}(std::string("homu")); // ok
C++ きびしい…。