Почему явное создание шаблона внешнего класса требуется перед явным созданием шаблона класса - PullRequest
2 голосов
/ 17 сентября 2010

У меня вопрос w.r.t в следующей теме: специализировать шаблон элемента без указания его родителя

Я абсолютно согласен со стандартным высказыванием, что это незаконно. Но я хочу понять , почему это незаконно ? Какое влияние это оказало бы на это?

1 Ответ

2 голосов
/ 17 сентября 2010

Может быть, из-за чего-то вроде этого:

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;

Разумное решение состоит в том, чтобы сказать "мы сделаем все это явным".

...