2017-04-22 4 views
0

나는 최근에이 코드 조각은 모두 GCC와 MSVC에서 잘 컴파일 것을 발견C++ 가변 람다에서 "자동"키워드를 제외 하시겠습니까?</p> <pre><code>auto foo = [](...){ cout << "foo() called" << endl; }; </code></pre> <p>그것은 매개 변수의 어떤 종류의 수를 소요하고있는 것처럼 작동하므로 간단하게, 그 매개 변수와 함께 아무것도하지 않는다 :

// 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 arguments] (http://en.cppreference.com/w/cpp/language/variadic_arguments) – cpplearner

+0

그 모든 것을 설명합니다! – Bernard

답변

9

이것은 단순한 오래된 유형의 안전하지 않은 C 스타일 variadic arguments입니다.

관련 문제