constexpr은 람다 함수 / 식에서 지원됩니까?
struct Test
{
static const int value = []() -> int { return 0; } ();
};
gcc-4.6을 사용하면 error: function needs to be constexpr
. constexpr
여러 장소에서 여러 가지 조합을 시도 했지만 운이 없습니다.
가요 constexpr
(관계없이뿐만 아니라 람다 함수 지원 return
유형 지정된 여부)? 올바른 구문은 무엇입니까?
가능한 해결 방법이 있습니까?
업데이트 : C ++ 17부터 상수 표현식에 람다가 허용됩니다.
Lambda는 현재 (C ++ 14) [expr.const] / (2.6)에 따라 상수 표현식에서 허용되지 않지만 N4487 이 승인 되면 허용됩니다 (작업 초안 N4582에서 찾을 수 있음).
이 제안은 상수 표현식에서 람다 표현식 을 허용 하여 기존 제한을 제거 할 것을 제안합니다 . 저자는 특정 람다 표현식 및 특정 클로저 객체에 대한 연산이 상수 표현식 내에 나타날 수 있다고 제안합니다 . 그렇게함으로써 우리는 또한 데이터 멤버 각각의 유형이 리터럴 유형 인 경우 클로저 유형을 리터럴 유형으로 간주 할 것을 제안합니다. 그리고, 그 경우,
constexpr
지시자는 생성 된 함수 호출 연산자 것이, 람다 - 선언자 내에 생략constexpr
그것의 요구 조건을 만족한다면constexpr
(받는 유사한 기능constexpr
이미 내재적 정의 생성자와 할당 연산자 기능 발생 추론).
C ++ 0x FDIS §7.1.5 [dcl.constexpr] / 1에서 :
constexpr
지정은 변수, 함수 또는 함수 템플릿의 선언, 또는 문자 형태의 정적 데이터 멤버 선언의 정의를 적용한다.
람다 식은 그런 것이 아니므로 선언 할 수 없습니다 constexpr
.
C ++ 17 이전에는 람다가 constexpr
. 상수 표현식 내에서는 사용할 수 없습니다 .
C ++ 17로 시작하는 람다는 constexpr
의미가 있습니다. 제안 N4487 은 C ++ 17 표준에 포함될 것입니다. 에 자신의 웹 사이트 허브 셔터는 ISO C ++위원회의 의자, 다음과 같이 말했다
Lambda는 이제 constexpr 함수 내에서 허용됩니다 .
FFWD에서 2018 년까지 :)
auto my_const_expression_lambda = []()
constexpr -> bool
{
return true ;
}
C ++ 17 이후
참조 URL : https://stackoverflow.com/questions/6420085/is-constexpr-supported-with-lambda-functions-expressions
'programing' 카테고리의 다른 글
TypeScript의 'instanceof'에서 " 'Foo'는 유형 만 참조하지만 여기서는 값으로 사용되고 있습니다."라는 오류가 표시되는 이유는 무엇입니까? (0) | 2021.01.15 |
---|---|
던지지 않도록 IDisposable.Dispose ()를 구현해야합니까? (0) | 2021.01.15 |
MySQL vs. JSON-왜? (0) | 2021.01.15 |
"from __future__ import braces"코드는 어디에 있습니까? (0) | 2021.01.15 |
깊이 1로 특정 커밋을 얕은 복제하는 방법은 무엇입니까? (0) | 2021.01.15 |