다음 코드를 C++ 98/03에서 컴파일해야합니까?기본 클래스의 함수 템플릿을 멤버 함수 포인터에 할당 할 수 있어야합니다
struct Base
{
template <typename T> void func() { }
void norm() { }
};
struct Derived : public Base { };
template <typename U>
struct Usage
{
typedef void (U::*Method)();
Usage(Method test) { }
};
int main()
{
Usage<Derived> good(&Derived::norm);
// "Error: Cannot use void(*)() to initialize Usage<Derived>." on next line
Usage<Derived> bad(&Derived::func<int>);
return 0;
}
이 코드 조각은 내가 시험해 볼 수있는 거의 모든 컴파일러에서 올바르게 작동합니다. Sun C++ 5.11 및 Sun C++ 5.12를 저장하십시오.
버그일까요? 그렇다면 현재 공급 업체 (현재 Oracle)에게보고되었는지 누구에게 알 수 있습니까?
편집 :
내가 중 하나를 C++ 03 또는 C++ 11 표준 문서에서 적절한 관련 견적을 제공하는 답변을 받아 들일 수 있습니다. 또는 Oracle에 버그 보고서에 대한 정보를 제공 할 수있는 경우.
코드가 좋습니다. Sun C++은 악명 높지 * 않습니다. –
'func'가'T' 타입을 전혀 사용하지 않기 때문에,'Base :: norm'처럼 항상 void (Base :: *) (void)'가됩니다. –
@DrewDormann - 네, 아시다시피, 불행히도. 그들의 표준 라이브러리 구현은 전형적으로 잘 보입니다. –