[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / libc / src / __support / CPP / utility / integer_sequence.h
blob2ed26df3d238eee8b2c5f6b540bdf35598af2ff2
1 //===-- integer_sequence utility --------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 #ifndef LLVM_LIBC_SRC___SUPPORT_CPP_UTILITY_INTEGER_SEQUENCE_H
9 #define LLVM_LIBC_SRC___SUPPORT_CPP_UTILITY_INTEGER_SEQUENCE_H
11 #include "src/__support/CPP/type_traits/is_integral.h"
13 namespace LIBC_NAMESPACE::cpp {
15 // integer_sequence
16 template <typename T, T... Ints> struct integer_sequence {
17 static_assert(cpp::is_integral_v<T>);
18 template <T Next> using append = integer_sequence<T, Ints..., Next>;
21 namespace detail {
22 template <typename T, int N> struct make_integer_sequence {
23 using type =
24 typename make_integer_sequence<T, N - 1>::type::template append<N>;
26 template <typename T> struct make_integer_sequence<T, -1> {
27 using type = integer_sequence<T>;
29 } // namespace detail
31 template <typename T, int N>
32 using make_integer_sequence =
33 typename detail::make_integer_sequence<T, N - 1>::type;
35 } // namespace LIBC_NAMESPACE::cpp
37 #endif // LLVM_LIBC_SRC___SUPPORT_CPP_UTILITY_INTEGER_SEQUENCE_H