5

에서 컴파일에 실패부분 전문성은 내가 다음에 귀결 코드를 VS2005

error C2039: 'func' : is not a member of 'Baz<T>' 
     with 
     [ 
      T=FloatFooBar 
     ] 
error C3861: 'func': identifier not found 
제가 const Foo<T>& I const Foo<T>* I에 바뀌면

그러나, (오히려 기준보다는 포인터를 전달 I) 등을 정의 FloatFooBar :

,
typedef FooBar<float, &MyStruct::s_floatFoo> FloatFooBar; 

GCC와 VS2005 모두 만족합니다.

무슨 일 이니? VS2005가 GCC 나 컴파일러 버그와 다르게 처리하는 미묘한 템플릿 대체 오류입니까?

(가장 이상한 것 : 생각이 오늘 아침 일찍 VS2005에서 위의 코드가 작동했다.하지만 그건 내 아침 커피 전에 있었어. 나는 지금 카페인없는 일이 전혀 없다는 것을 완전히 확신하지 못했습니다. 갈망에 의한 정신 착란 ...)

+0

코드가 정상인 것 같습니다. VS2005의 버그처럼 보입니다. –

+0

코드가 Comeau 온라인으로 컴파일되므로 아마도 VS2005로 제한됩니다. – rotoglup

답변

0

는 VS2005과 같은 내게는 참으로 func라는 이름의 멤버를 포함하지 않는 Baz

template <typename T> struct Baz {}; 

이 구조체의 첫 번째 템플릿 사양을 사용합니다. VS2005가 템플릿 매개 변수를 올바르게 추론하지 않는 것처럼 보입니다.

+0

예, VS에서 버그가 점점 더 많이 보이고 있습니다. –

관련 문제