다음 코드 비트는 GCC 4.5.3에서 컴파일되지만 VS 2008 및 2010에서는 컴파일되지 않습니다. VS 컴파일러 버그 때문입니까? 아니면 표준에서 기본 함수 템플릿 인수 값을 제공하는 것을 금지합니까?멤버 함수 템플릿 인수 기본값
#include <cstdlib>
struct Bar
{
enum Group{ A , B , C };
};
struct Foo
{
template<typename T>
static void getSome(typename T::Group = T::A);
};
template<typename T>
void Foo::getSome(typename T::Group)
{
};
int main()
{
Foo::getSome<Bar>(); // Does not compile in VS 2008 & 2010 (compiles in gcc 4.5.3)
Foo::getSome<Bar>(Bar::C); // Compiles in VS 2008 and gcc 4.5.3
return EXIT_SUCCESS;
}
오류 메시지
prog.cpp(11) : error C2589: '::' : illegal token on right side of '::'
prog.cpp(11) : error C2059: syntax error : '::'
또 다른 절름 거리는 방법은 템플릿 매개 변수의 오버로드 즉, getSome()을 제공하여 getSome (T :: A)를 호출하는 것만으로 기본 매개 변수를 제공하는 것입니다. MSVC에서도 작동합니다. –