2

以下案例在 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 ‘&gt;’

我用的时候好像不太喜欢

get_type<T>::type_

作为模板参数默认值。MS Visual Studio (Express 10) 编译得很好。我可以做哪些改变来让 g++ 编译它?

4

1 回答 1

6

用于typename消除歧义:

template <typename T, typename P = typename get_type<T>::type_>
                                   |______|
于 2012-11-01T19:29:20.593 回答