以下案例在MS Visual Studio中编译良好,但在g ++ 4.6中编译不正确。
编译:
template <typename T>
struct get_type
{ typedef void type_;};
template <>
struct get_type<float>
{ typedef float type_; };
template <>
struct get_type<int>
{ typedef int type_; };
template <typename T, typename P=get_type<T>::type_> // <--- line 16
struct get_destroy_type
{ static inline void exec(P a) {} };
结果:
../testlibrary/testlibrary.h:16:34: error: expected type-specifier
../testlibrary/testlibrary.h:16:34: error: expected ‘>’
使用
时似乎不喜欢它get_type<T>::type_
作为模板参数的默认值。 MS Visual Studio(Express 10)编译好了。我可以做些什么来让g ++编译呢?
答案 0 :(得分:6)
使用typename
消除歧义:
template <typename T, typename P = typename get_type<T>::type_>
|______|