#include <iostream>
#include <vector>

using namespace std;

template <typename T>
struct Get;

template <typename T>
struct Data {
    std::vector<T> data;
};

template <typename T>
struct Get< Data<T> >
{
	Data<T> operator()() {
		return Data<T>{ {T{}, T{}} };
	};
};

template <typename T>
struct Get< std::vector<T> >
{
	std::vector<T> operator()() {
		return std::vector<T>(3);
	};
};

int main() {
    std::cout << Get< Data<int> >()().data.size() << std::endl;  // expected output is 2
    std::cout << Get< std::vector<int> >()().size() << std::endl; // expected output is 3
    return 0;
}