2012-07-05 3 views
6

가상 멤버 함수 포인터에 decltype을 사용하는 것이 맞습니까?가상 멤버 함수 포인터와 함께 decltype 사용

다음은 VS2012에서 내부 오류 (C1001)를 생성합니다.

struct C 
{ 
    virtual void Foo() {} 

    typedef decltype(&C::Foo) type; //pointer 
} 

그러나 이것은 잘 컴파일 :

struct C 
{ 
    virtual void Foo() {} 

    typedef decltype(C::Foo) type; //not pointer 
} 

이 버그인가요?

+9

내부 오류가 아니라 "오류"메시지가 생성되는 것은 "불법"이었습니다. 컴파일러에서 버그를 발견했습니다. – AnT

+3

@ AndreyT : +1, 나는 그것을 추가 할 것이다 : * 그것이 불법이라도 내부 오류를 일으키지 않아야한다 *. –

답변

4

MSVC에는 멤버 함수 포인터에 대해 decltype과 관련된 여러 가지 알려진 문제가 있습니다. 도 참조하십시오 Using decltype with member function pointers

이것은 올바른 구문입니다. g ++는 완벽하게 만족합니다 (http://ideone.com/sTZi6). 표준에 멤버 함수에 decltype의 작업을 제한하는 방법은 없습니다.

+0

thx. BTW는 또한 나의 질문 중 하나입니다. ;-) – Nubcase