fork(1) download
  1. #include <stdio.h>
  2.  
  3. // B.h =================
  4.  
  5. class A;
  6. /* 内部クラスは前方宣言できない
  7. class A::Inner;
  8. */
  9.  
  10. class B
  11. {
  12. public:
  13. void Func( A* p );
  14. /* 前方宣言してない(できない)のでエラー
  15. void Func( A::Inner* p ){}
  16. */
  17. template<class T>
  18. void Func( T* p );
  19. };
  20.  
  21. // B.cpp =================
  22.  
  23. class A
  24. {
  25. public:
  26. class Inner
  27. {};
  28. };
  29.  
  30. void B::Func( A* p ){ printf( "Func( A* p )\n" ); }
  31.  
  32. template<>
  33. void B::Func<A::Inner>( A::Inner* p ){ printf( "Func<A::Inner>( A::Inner* p )\n" ); }
  34.  
  35. int main( void )
  36. {
  37. B b;
  38. A a;
  39. A::Inner inner;
  40. b.Func( &a );
  41. b.Func( &inner );
  42. return 0;
  43. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
Func( A* p )
Func<A::Inner>( A::Inner* p )