В С++ и Objective-C я привык к переходу - объявлению любых необходимых классов, которые не нужно определять в заголовке, а затем импортировать файлы заголовков, определяющие эти классы в исходных файлах, если это необходимо.
Есть ли такая ситуация, когда это не будет хорошей идеей?
(Я знаю, что большой недостаток форвардной декларации - ограниченное использование неполного типа. В целях этого вопроса предположим, что в заголовке мне нужно использовать только что объявленный вперед класс как неполный тип.)