fork download
  1. #include <type_traits>
  2. #include <array>
  3. #include <iostream>
  4.  
  5. template<bool Condition, template<typename...> class T, template<typename...> class U>
  6. struct Conditional
  7. {
  8. template<typename... Args>
  9. using Type = T<Args...>;
  10. };
  11. template<template<typename...> class T, template<typename...> class U>
  12. struct Conditional<false, T, U>
  13. {
  14. template<typename... Args>
  15. using Type = U<Args...>;
  16. };
  17.  
  18. template<typename T, typename Size>
  19. using Array = std::array<T, Size::value>;
  20.  
  21. template<typename T, typename Size>
  22. using BigArray = std::array<T, Size::value * 2>;
  23.  
  24. int main()
  25. {
  26. Conditional<true, Array, BigArray>::Type<int, std::integral_constant<std::size_t, 42>> Foo;
  27. std::cout << Foo.size() << '\n';
  28.  
  29. Conditional<false, Array, BigArray>::Type<int, std::integral_constant<std::size_t, 42>> Bar;
  30. std::cout << Bar.size() << '\n';
  31. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
42
84