#include <iostream>
#include <vector>
#include <list>

template <bool C, template <typename...> class A, template <typename...> class B>
struct If
{
	template <typename... AArgs>
	using Type = A<AArgs...>;
};

template <template <typename...> class A, template <typename...> class B>
struct If<false, A, B>
{
	template <typename... BArgs>
	using Type = B<BArgs...>;
};

int main()
{
	If<true, std::vector, std::list>::Type<int> ct = { 23, 42 };
	If<false, std::vector, std::list>::Type<double> cf = { 3.14159, 13.37 };
	
	for (auto i : ct)
		std::cout << i << "\n";
	for (auto d : cf)
		std::cout << d << "\n";
	
	return 0;
}