fork download
  1. #include <iostream>
  2.  
  3. struct Quad
  4. {
  5. Quad(const size_t side){ std::cout<< "build quad: "<<side<<"\n"; }
  6. };
  7.  
  8. struct Rect
  9. {
  10. Rect(const size_t w,const size_t h){ std::cout<< "build rect: "<<w<<" : "<<h<<"\n"; }
  11. };
  12. const Quad*const quad = 0l;
  13. const Rect*const rect = 0l;
  14.  
  15.  
  16. struct Factory_figures
  17. {
  18. Factory_figures(){ count +=10; }
  19.  
  20. operator Quad() { return Quad(count); }
  21. operator Rect() { return Rect(count,count); }
  22. static size_t count;
  23. };
  24. size_t Factory_figures::count=0;
  25.  
  26. struct Figure
  27. {
  28. template<class T> Figure(T* tmp, const T& src = Factory_figures() ){}
  29. };
  30.  
  31.  
  32. int main()
  33. {
  34. Figure f1(quad);
  35. Figure f2(quad);
  36. Figure f3(quad);
  37. Figure f4(quad);
  38. Figure f5(rect);
  39. Figure f6(rect);
  40. return 0;
  41. }
Success #stdin #stdout 0.02s 2724KB
stdin
Standard input is empty
stdout
build quad: 10
build quad: 20
build quad: 30
build quad: 40
build rect: 50 : 50
build rect: 60 : 60