Причина, по которой не разрешены прямые объявления вложенного класса?

Пример:

// can't forward declare with class Foo::Bar

// actual class
class Foo
{
public:
    class Bar // or enum Bar
    {
    }
};

Я согласен с тем, что это запрещено в текущих стандартах C ++, но я не мог придумать вескую причину, чтобы не разрешать это хотя, особенно с C ++ 0x, теперь мы можем пересылать объявления перечислений. Я мог бы представить себе аргумент против этого, если бы мы объявили вложенный класс, который окажется частным, это было бы недопустимо. Но это не будет слишком большим отличием, если сказать вперед, объявляя класс в пространстве имен, а затем объявляя его вложенным классом внешнего класса. Компилятор просто выдаст ошибку (возможно, сообщение об ошибке в строке предыдущего объявления не соответствует этому объявлению).

Так почему же тогда это действительно не разрешено?

Другими словами (Джеймс Макнеллис), «Почему класс Foo :: Bar; без определения Foo или Bar не допускается?»

** Учитывая, что комитет по стандартам C ++ признал преимущество использования форвардных объявлений для уменьшения зависимостей и времени компиляции, введя форвардное объявление перечисления в C ++ 0x, наверняка это часть одного и того же, не так ли?

7
задан Zach Saw 13 July 2011 в 06:13
поделиться