Possible Duplicate:
Where and why do I have to put the 「template」 and 「typename」 keywords?模板元編程GCC錯誤
有似乎是在GCC 4.5.3中的錯誤:與 g++ bug.cpp -std=c++0x
出現任何錯誤
#include <type_traits>
template <bool isFundamentalType, bool isSomething>
struct Foo
{
template <typename T>
static inline void* Do(size_t size);
};
template <>
struct Foo<true, false>
{
template <typename T>
static inline void* Do(size_t size)
{
return NULL;
}
};
template <>
struct Foo<false, false>
{
template <typename T>
static inline void* Do(size_t size)
{
return NULL;
}
};
class Bar
{
};
template <typename T>
int Do(size_t size)
{
// The following fails
return (int) Foo<std::is_fundamental<T>::value, false>::Do<T>(size);
// This works -- why?
return (int) Foo<false, false>::Do<T>(size);
}
int main()
{
return Do<Bar>(10);
}
:
bug.cpp: In function ‘int Do(size_t)’:
bug.cpp:37:65: error: expected primary-expression before ‘>’ token
有一個已知的解決方法,可以讓我爲了解決這個問題?
編輯:MSVC 2010設法編譯這就好了。
簡短回答:'Foo <...> :: template Do(size)'。 –
Xeo