Создание неопределенного класса как друга и определение его позже

Заведение неизвестного друга

template<typename T>
class List
{
protected:

    class a {
        int x;
        int y;
    private:
        friend class b;  // <------------ Why this is not an error? 
    };

    template <typename U > class b {  //If that is not a error this should be an error
        int z;
        U y;
    };

    public:
        List() {
            a* ptr = (a *)new unsigned char[sizeof(a)];
        }
};

int main() {
    List<int>  mylist;
}

Пожалуйста, пройдите по этой ссылке, у меня есть свои вопросы в виде комментариев в коде. Я пытаюсь сделать другой класс другом моего класса. Но этот класс не знает во время знакомства. Какое правило C ++ это позволяет? Позже я определяю этот класс таким образом, что он несовместим с объявлением друга. Почему это не вызывает ошибку. Спасибо

7
задан Prasoon Saurav 26 November 2010 в 14:11
поделиться