默认模板参数导致“预期类型说明符”

时间:2012-11-01 19:28:26

标签: c++ templates

以下案例在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 ++编译呢?

1 个答案:

答案 0 :(得分:6)

使用typename消除歧义:

template <typename T, typename P = typename get_type<T>::type_>
                                   |______|