fork(1) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template<int i, typename T = int> struct A
  5. {
  6. T num = i;
  7. A<i, T>()
  8. {
  9. cout << "Instantiated a A<" << i << ">" << endl;
  10. }
  11. };
  12.  
  13. template<int i, int i2> struct B
  14. {
  15. static A<i> a;
  16. static A<i * i2> a2;
  17. };
  18. template<int i, int i2> A<i> B<i, i2>::a{};
  19. template<int i, int i2> A<i * i2> B<i, i2>::a2{};
  20.  
  21. template<typename T> struct C
  22. {
  23. static void doSomething()
  24. {
  25. cout << "Have a A<" << T::a.num << "> and a A<" << T::a2.num << "> in C" << endl;
  26. }
  27. };
  28.  
  29. int main() {
  30. typedef C<B<2, 2>> c;
  31. cout << "Typedefined a C\nCalling static member function to initialize C<B<2, 2>>'s B<2, 2>'s A<>s" << endl;
  32. c::doSomething();
  33. return 0;
  34. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
Instantiated a A<2>
Instantiated a A<4>
Typedefined a C
Calling static member function to initialize C<B<2, 2>>'s B<2, 2>'s A<>s
Have a A<2> and a A<4> in C