Puede reenviar declarar
- plantillas, incluyendo especializaciones parciales
- especializaciones explícitos
- clases anidadas (esto incluye estructuras, clases "reales" y sindicatos)
- clases no anidados y locales
- Variables ("extern int a;")
- Funciones
Si por "declaración directa" significa estrictamente "declarar pero no definir" también puede reenviar declarar funciones de miembro. Pero no puede redeclararlos en su definición de clase una vez que se declaran. No puede reenviar-declarar enumeraciones. No estoy seguro de si me perdí algo.
Tenga en cuenta que todas las declaraciones de reenvío enumeradas anteriormente, excepto las especializaciones parciales y explícitas, deben declararse utilizando un nombre no calificado y que las funciones de miembro y anidadas solo pueden declararse pero no definirse en su definición de clase.
class A { };
class A::B; // not legal
namespace A { }
void A::f(); // not legal
namespace A { void f(); } // legal
class B { class C; }; // legal
class B::C; // declaration-only not legal
class D { template<typename T> class E; };
template<typename T> class D::E<T*>; // legal (c.f. 14.5.4/6)
¿Por qué no lo intentas y ves? –
enum va a poder reenviar declarar en C++ 0x. y no puede reenviar "parcialmente" las clases (declaración de métodos) – erjot
Tiendo a poner enumeraciones escritas dentro de las clases que las "definen". Luego encuentro problemas con el compilador de "dependencia circular" con dos clases que hacen referencia a las enumeraciones de cada una. – franji1