2016-11-11 2 views
7

이 컴파일 :[] mutable {}이 (가) 컴파일되지 않는 이유는 무엇입니까?

[]{}; 

이뿐만 아니라 :

[]() mutable {}; 

그러나이 코드

, 컴파일러 나 오류 메시지를 던져 :

[] mutable {}; 
    ^~~~~~~ 
error: lambda requires '()' before 'mutable' 

어떤 특별한 이유가 있습니까?

+2

@BaummitAugen 독서 및 이해 표준은 자신의 기술 (특히 영어가 모국어가 아닌 경우)이므로 IMHO에 질문하는 것이 좋습니다. – Slava

+0

@BaummitAugen 어떤 특별한 이유가있을 경우 표준에서 그런 식으로 지정했습니다. 그렇지 않다면, 그렇습니다. 나는 이것을 여러 번 우연히 발견했기 때문에 이것을 바꿔야합니다. –

+0

@RalphTandetzky 좋은 이유를 생각할 수 없으며, 대부분 감독 할 가능성이 있습니다. 그것을 바꿀 제안을하십시오! – TartanLlama

답변

5

문법이 표준에 쓰여진 결과 일뿐입니다. 이것이 감독인지 아닌지 나는 모른다.

람다 식은 람다 소개자 (괄호)로 시작하고 그 뒤에 람다 선언자 (옵션)가옵니다.

람다 선언자는 인수 목록, 변경 가능 속성, 예외 지정자 및 반환 유형을 포함합니다. 인수 목록을 제외하고 모두 선택 사항입니다. 그래서 람다 선언자가 존재한다면 괄호가 있어야합니다.

이 이유 때문에 mutable 키워드 만 가질 수 없습니다.

1

섹션 5.1.2 [expr.prim.lambda]에서 n4296 (C++ 14 최종본)을 보면 이것은 문법에서 벗어난 것입니다. mutable은 괄호가 포함 된 람다 선언자에서만 사용할 수 있습니다. 전체 람다 - 선언자는 선택 사항입니다. (그래서 괄호를 생략 할 수 있습니다).

관련 문제