Но, конечно, нам не стоит даже думать о таких вещах, я знаю, но все же это довольно интересно:
class A; //declaration
struct A {...}; //definition
struct B; //declaration
class B {...}; //definition
Когда я думаю об этом, я не вижу никаких проблем, если бы такое действительно было разрешено (потому что структура и класс по сути одно и то же). Но так ли это (стандартно)?
MSVC принимает и компилирует его с предупреждением.