2012-06-18 3 views
3
I 비 정적 멤버 함수 C++ 11 람다를 사용하여 정적 멤버 함수를 호출 할

Possible Duplicate:
lambdas require capturing 'this' to call static member function?사용 C는 ++ 11 비 정적 멤버 함수 람다와 같은 클래스의 정적 멤버 함수를 호출

class A { 
    static void a() {} 
public: 
    void x() { 
     []() { A::a(); }(); 
    } 
}; 

그러나 gcc4.6와 gcc4.7 모두에 오류가있어 : 오류 : 같은 클래스의 '이'는이 람다 함수

에 대한 캡처되지 않은 이유를 '이' '이후 람다 필요성도 a '는 정적 멤버 함수입니다.

'x'가 정적이거나 'a'가 다른 클래스의 정적 멤버 함수 인 경우 'this'는 필요하지 않습니다. 이유는 무엇입니까?

+0

왜이 경우 람다가 필요합니까? 왜'':: a()'를 간단하게 호출하지 않습니까? – Naveen

+0

VS2010 SP1은 오류없이 컴파일되고 실행됩니다. – Simon

+0

다른 질문에는 적절한 버그 ID가 없습니다. 에서 편집해야합니까? – dirkgently

답변

1
class A { 
    static void a() {} 
public: 
    void x() { 
     []() { A::a(); }(); 
    } 
}; 

int main() { A a; a.x(); } 

이것은 clang 3.2와 잘 맞습니다. 또한 컴파일되지 않아야 할 이유가 없습니다. 메모 당 GCC의 bug입니다. 이것은 4.7.1에서 수정되어야한다. gcc는 일찍 시작되었지만 C++ 11 기능 중 일부를 지원하는 데 어려움을 겪었습니다.

편집 : 체크 아웃 할 수있는 비슷한 SO question이 있습니다.

+0

gcc의 버그로 보이고 gcc4.7.1은 여전히 ​​잘못되었습니다. 4.7.2를 원하면 그것을 고칠 수 있습니다. – sealiay

+0

@sealiay : GCC의 버그 노트에 결과를 게시해야한다고 생각합니다! (플랫폼 및 다른 필수 세부 정보를 언급하는 것을 잊지 마십시오.) – dirkgently

관련 문제