#include <type_traits>
#include <array>
#include <iostream>

template<bool Condition, template<typename...> class T, template<typename...> class U>
struct Conditional
{
	template<typename... Args>
	using Type = T<Args...>;
};
template<template<typename...> class T, template<typename...> class U>
struct Conditional<false, T, U>
{
	template<typename... Args>
	using Type = U<Args...>;
};

template<typename T, typename Size>
using Array = std::array<T, Size::value>;

template<typename T, typename Size>
using BigArray = std::array<T, Size::value * 2>;
  
int main() 
{ 
	Conditional<true, Array, BigArray>::Type<int, std::integral_constant<std::size_t, 42>> Foo;
	std::cout << Foo.size() << '\n';
	
	Conditional<false, Array, BigArray>::Type<int, std::integral_constant<std::size_t, 42>> Bar;
	std::cout << Bar.size() << '\n';
}