fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. template <typename T>
  7. struct Get;
  8.  
  9. template <typename T>
  10. struct Data {
  11. std::vector<T> data;
  12. };
  13.  
  14. template <typename T>
  15. struct Get< Data<T> >
  16. {
  17. Data<T> operator()() {
  18. return Data<T>{ {T{}, T{}} };
  19. };
  20. };
  21.  
  22. template <typename T>
  23. struct Get< std::vector<T> >
  24. {
  25. std::vector<T> operator()() {
  26. return std::vector<T>(3);
  27. };
  28. };
  29.  
  30. int main() {
  31. std::cout << Get< Data<int> >()().data.size() << std::endl; // expected output is 2
  32. std::cout << Get< std::vector<int> >()().size() << std::endl; // expected output is 3
  33. return 0;
  34. }
Success #stdin #stdout 0s 3272KB
stdin
Standard input is empty
stdout
2
3