2017-04-22 15 views
0

私は最近、コードのこの作品は、GCCとMSVCの両方で正常にコンパイルされることが分かった:C++バリデーションラムダで "auto"キーワードを使用しないでください。

auto foo = [](...){ 
    cout << "foo() called" << endl; 
}; 

それがあるかのように動作しますので、それは、それをパラメータの任意の種類の任意の数を取り、単にそれらのパラメータを持つ何もしません

// All of these lines will call the lambda function 
foo(); 
foo(100); 
foo("Test"); 
foo("Testing", 1, 2, 3); 

lambda functions上のC++の参照はこれについて言及していないようだ、とどちらもparameter packsのページをしません:auto...の前に置かれました。

はさらに驚くべきことに、これはコンパイルに失敗します。

auto foo = [](... x){ // compile error 
    cout << "foo() called" << endl; 
}; 

は標準によって決まるこの動作であり、もしそうなら、なぜかつてのコンパイル、後者は失敗するでしょうか?

+1

[Variadic引数](http://en.cppreference.com/w/cpp/language/variadic_arguments) – cpplearner

+0

これはすべてを説明しています! – Bernard

答えて

関連する問題