Пример:
// 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, несомненно, это часть того же, не так ли?