2

我的问题是以下线程:专门化成员模板而不专门化其父模板

我完全同意标准说这样做是非法的。但我想了解为什么这样做是非法的?如果允许,会有什么影响?

4

1 回答 1

2

也许是因为这样的事情:

template <typename T>
struct foo
{
    template <typename U>
    struct bar
    {
        typedef U type;
    };
};

template <typename T> 
struct foo<T>::bar<int> // imaginary
{
    typedef void type;
};

template <>
struct foo<float>
{
    template <typename U>
    struct bar
    {
        typedef U* type;
    };
};

// is it void [foo<T>::bar<int>] or 
// int* [foo<float>::bar<U>]?
typedef foo<float>::bar<int>::type ambiguous;

一个明智的解决方案是说“我们会让整个事情变得明确”。

于 2010-09-17T07:21:35.300 回答