2012-12-12 3 views
3

다음은lambas는 로컬 클래스를 볼 수 있습니까?

int main() 
{ 
    struct one {}; 
    [](){ one uno; return uno; }(); 
} 

VS2010/VS2012 모두이 코드에서 컴파일러 충돌이 ...

int main() 
{ 
    struct one {}; 
    [](){ return one(); }(); 
} 

그리고 약간의 비틀기와 VS2010에 오류 'one': identifier not found를 제공하고 VS2012.

그래서 질문은 (컴파일러 크래시 무시), lambas는 로컬 클래스의 가시성을 가질 수 있습니까?

+1

예, VS가 손상되었습니다. –

+3

둘째 람다에 대한 명시적인 반환 유형이 필요하지 않습니까? 이것은 컴파일러가 충돌하는 것에 대한 핑계가 아닙니다. –

+0

@SteveJessop _need_? 나는 람다에 대한 명시적인 반환 규칙을 알지 못합니다. 그러나 단 1 개의 수익 만 있고 유형은 잘 알려져 있습니다. 왜 그게 필요하지? – David

답변

4

예, VS가 잘못되었습니다. 5.1.2p7에서 :

는 [...] 이름 조회의 목적을 위해, [...]를 화합물 문는 람다 식의 맥락에서 고려된다.

관련 문제