오늘 사무실에서 이상한 컴파일 오류가 발생하여 GCC (3.4.6) 버전의 버그 인 것으로 의심됩니다. 나는 몇 줄의 코드 (아래)로 그것을 끓일 수 있었다. 내가받을 컴파일 오류는 다음과 같습니다GCC의 템플릿 함수 관련 버그 3.4.6
test.cpp:26: error: expected primary-expression before '>' token
test.cpp:26: error: expected primary-expression before ')' token
이 오류는 첫 번째 문 (bar.value("yoyo")
)의 결과를 저장하는 임시 변수를 도입하여 피할 수 있습니다. 아무도이 원인을 알 수 있습니까? GCC 3.4.6의 버그입니까 (GCC 4.x.x에서 작동하는 것 같습니다). 그리고이 버전에도 비슷한 템플릿 관련 버그가 있습니까?
class Foo
{
public:
template<typename T> bool doIt() const { return true; }
};
class Bar
{
public:
Foo value(const char * key)
{
return Foo();
}
};
template<typename T>
void
mytestfunc()
{
Bar bar;
// Works fine:
Foo foo = bar.value("yoyo");
foo.doIt<T>();
// Does not work on gcc 3.4.6:
bar.value("yoyo").doIt<T>();
}
int main(int argc, char * args[])
{
return 0;
}
설명을위한 Thx가 작동합니다. 아무리 예쁜 구문이 아니더라도 ... – larsmoa
진실은이 경우 이름이 종속되지 않으며'template' 키워드가 필요하지 않다는 것입니다. 컴파일러의 버그처럼 보입니다. 한 예로, Comeau는 그대로 컴파일합니다. – AnT