fork download
  1. #include <utility>
  2. #include <type_traits>
  3.  
  4. namespace detail
  5. {
  6.  
  7. template <std::size_t N>
  8. struct factorial :
  9. std::integral_constant<std::size_t, N * factorial<N - 1>::value>
  10. {
  11. };
  12.  
  13. template <>
  14. struct factorial<0> : std::integral_constant<std::size_t, 1>
  15. {};
  16.  
  17. template <typename T> struct factorial_seq_impl;
  18.  
  19. template <std::size_t...Is>
  20. struct factorial_seq_impl<std::index_sequence<Is...>>{
  21. using type = std::index_sequence<factorial<Is>::value...>;
  22. };
  23.  
  24. }
  25.  
  26. template <std::size_t N>
  27. using factorial_seq =
  28. typename detail::factorial_seq_impl<std::make_index_sequence<N>>::type;
  29.  
  30. static_assert(std::is_same<std::index_sequence<1, 1, 2, 6, 24>, factorial_seq<5>>::value, "");
  31.  
  32. int main() {
  33. }
Success #stdin #stdout 0s 3092KB
stdin
Standard input is empty
stdout
Standard output is empty