391 changes: 342 additions & 49 deletions libc/src/__support/CPP/type_traits.h

Large diffs are not rendered by default.

28 changes: 0 additions & 28 deletions libc/src/__support/CPP/type_traits/add_lvalue_reference.h

This file was deleted.

28 changes: 0 additions & 28 deletions libc/src/__support/CPP/type_traits/add_pointer.h

This file was deleted.

29 changes: 0 additions & 29 deletions libc/src/__support/CPP/type_traits/add_rvalue_reference.h

This file was deleted.

20 changes: 0 additions & 20 deletions libc/src/__support/CPP/type_traits/bool_constant.h

This file was deleted.

25 changes: 0 additions & 25 deletions libc/src/__support/CPP/type_traits/conditional.h

This file was deleted.

38 changes: 0 additions & 38 deletions libc/src/__support/CPP/type_traits/decay.h

This file was deleted.

23 changes: 0 additions & 23 deletions libc/src/__support/CPP/type_traits/enable_if.h

This file was deleted.

20 changes: 0 additions & 20 deletions libc/src/__support/CPP/type_traits/false_type.h

This file was deleted.

23 changes: 0 additions & 23 deletions libc/src/__support/CPP/type_traits/integral_constant.h

This file was deleted.

27 changes: 0 additions & 27 deletions libc/src/__support/CPP/type_traits/is_arithmetic.h

This file was deleted.

28 changes: 0 additions & 28 deletions libc/src/__support/CPP/type_traits/is_array.h

This file was deleted.

44 changes: 0 additions & 44 deletions libc/src/__support/CPP/type_traits/is_base_of.h

This file was deleted.

29 changes: 0 additions & 29 deletions libc/src/__support/CPP/type_traits/is_class.h

This file was deleted.

25 changes: 0 additions & 25 deletions libc/src/__support/CPP/type_traits/is_const.h

This file was deleted.

45 changes: 0 additions & 45 deletions libc/src/__support/CPP/type_traits/is_convertible.h

This file was deleted.

65 changes: 0 additions & 65 deletions libc/src/__support/CPP/type_traits/is_destructible.h

This file was deleted.

23 changes: 0 additions & 23 deletions libc/src/__support/CPP/type_traits/is_enum.h

This file was deleted.

35 changes: 0 additions & 35 deletions libc/src/__support/CPP/type_traits/is_floating_point.h

This file was deleted.

33 changes: 0 additions & 33 deletions libc/src/__support/CPP/type_traits/is_function.h

This file was deleted.

39 changes: 0 additions & 39 deletions libc/src/__support/CPP/type_traits/is_integral.h

This file was deleted.

33 changes: 0 additions & 33 deletions libc/src/__support/CPP/type_traits/is_lvalue_reference.h

This file was deleted.

24 changes: 0 additions & 24 deletions libc/src/__support/CPP/type_traits/is_null_pointer.h

This file was deleted.

28 changes: 0 additions & 28 deletions libc/src/__support/CPP/type_traits/is_pointer.h

This file was deleted.

29 changes: 0 additions & 29 deletions libc/src/__support/CPP/type_traits/is_reference.h

This file was deleted.

32 changes: 0 additions & 32 deletions libc/src/__support/CPP/type_traits/is_rvalue_reference.h

This file was deleted.

25 changes: 0 additions & 25 deletions libc/src/__support/CPP/type_traits/is_same.h

This file was deleted.

28 changes: 0 additions & 28 deletions libc/src/__support/CPP/type_traits/is_signed.h

This file was deleted.

22 changes: 0 additions & 22 deletions libc/src/__support/CPP/type_traits/is_trivially_constructible.h

This file was deleted.

23 changes: 0 additions & 23 deletions libc/src/__support/CPP/type_traits/is_trivially_copyable.h

This file was deleted.

35 changes: 0 additions & 35 deletions libc/src/__support/CPP/type_traits/is_trivially_destructible.h

This file was deleted.

23 changes: 0 additions & 23 deletions libc/src/__support/CPP/type_traits/is_union.h

This file was deleted.

28 changes: 0 additions & 28 deletions libc/src/__support/CPP/type_traits/is_unsigned.h

This file was deleted.

24 changes: 0 additions & 24 deletions libc/src/__support/CPP/type_traits/is_void.h

This file was deleted.

37 changes: 0 additions & 37 deletions libc/src/__support/CPP/type_traits/make_signed.h

This file was deleted.

42 changes: 0 additions & 42 deletions libc/src/__support/CPP/type_traits/make_unsigned.h

This file was deleted.

37 changes: 0 additions & 37 deletions libc/src/__support/CPP/type_traits/remove_all_extents.h

This file was deleted.

25 changes: 0 additions & 25 deletions libc/src/__support/CPP/type_traits/remove_cv.h

This file was deleted.

24 changes: 0 additions & 24 deletions libc/src/__support/CPP/type_traits/remove_cvref.h

This file was deleted.

24 changes: 0 additions & 24 deletions libc/src/__support/CPP/type_traits/remove_extent.h

This file was deleted.

24 changes: 0 additions & 24 deletions libc/src/__support/CPP/type_traits/remove_reference.h

This file was deleted.

20 changes: 0 additions & 20 deletions libc/src/__support/CPP/type_traits/true_type.h

This file was deleted.

20 changes: 0 additions & 20 deletions libc/src/__support/CPP/type_traits/type_identity.h

This file was deleted.

26 changes: 0 additions & 26 deletions libc/src/__support/CPP/type_traits/void_t.h

This file was deleted.

47 changes: 43 additions & 4 deletions libc/src/__support/CPP/utility.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,48 @@
#ifndef LLVM_LIBC_SRC_SUPPORT_CPP_UTILITY_H
#define LLVM_LIBC_SRC_SUPPORT_CPP_UTILITY_H

#include "src/__support/CPP/utility/declval.h"
#include "src/__support/CPP/utility/forward.h"
#include "src/__support/CPP/utility/integer_sequence.h"
#include "src/__support/CPP/utility/move.h"
#include "src/__support/CPP/type_traits.h"
#include "src/__support/macros/attributes.h"

namespace __llvm_libc::cpp {

template <typename T, T... Ints> struct integer_sequence {
static_assert(is_integral_v<T>);
template <T Next> using append = integer_sequence<T, Ints..., Next>;
};

namespace internal {

template <typename T, int N> struct make_integer_sequence {
using type =
typename make_integer_sequence<T, N - 1>::type::template append<N>;
};

template <typename T> struct make_integer_sequence<T, -1> {
using type = integer_sequence<T>;
};

} // namespace internal

template <typename T, int N>
using make_integer_sequence =
typename internal::make_integer_sequence<T, N - 1>::type;

template <typename T>
LIBC_INLINE constexpr T &&forward(typename remove_reference<T>::type &value) {
return static_cast<T &&>(value);
}

template <typename T>
LIBC_INLINE constexpr T &&forward(typename remove_reference<T>::type &&value) {
return static_cast<T &&>(value);
}

template <typename T>
LIBC_INLINE constexpr typename remove_reference<T>::type &&move(T &&value) {
return static_cast<typename remove_reference<T>::type &&>(value);
}

} // namespace __llvm_libc::cpp

#endif // LLVM_LIBC_SRC_SUPPORT_CPP_UTILITY_H
28 changes: 0 additions & 28 deletions libc/src/__support/CPP/utility/declval.h

This file was deleted.

32 changes: 0 additions & 32 deletions libc/src/__support/CPP/utility/forward.h

This file was deleted.

37 changes: 0 additions & 37 deletions libc/src/__support/CPP/utility/integer_sequence.h

This file was deleted.

22 changes: 0 additions & 22 deletions libc/src/__support/CPP/utility/move.h

This file was deleted.

56 changes: 2 additions & 54 deletions utils/bazel/llvm-project-overlay/libc/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -284,53 +284,7 @@ libc_support_library(

libc_support_library(
name = "__support_cpp_type_traits",
hdrs = [
"src/__support/CPP/type_traits.h",
"src/__support/CPP/type_traits/add_lvalue_reference.h",
"src/__support/CPP/type_traits/add_pointer.h",
"src/__support/CPP/type_traits/add_rvalue_reference.h",
"src/__support/CPP/type_traits/bool_constant.h",
"src/__support/CPP/type_traits/conditional.h",
"src/__support/CPP/type_traits/decay.h",
"src/__support/CPP/type_traits/enable_if.h",
"src/__support/CPP/type_traits/false_type.h",
"src/__support/CPP/type_traits/integral_constant.h",
"src/__support/CPP/type_traits/is_arithmetic.h",
"src/__support/CPP/type_traits/is_array.h",
"src/__support/CPP/type_traits/is_base_of.h",
"src/__support/CPP/type_traits/is_class.h",
"src/__support/CPP/type_traits/is_const.h",
"src/__support/CPP/type_traits/is_convertible.h",
"src/__support/CPP/type_traits/is_destructible.h",
"src/__support/CPP/type_traits/is_enum.h",
"src/__support/CPP/type_traits/is_floating_point.h",
"src/__support/CPP/type_traits/is_function.h",
"src/__support/CPP/type_traits/is_integral.h",
"src/__support/CPP/type_traits/is_lvalue_reference.h",
"src/__support/CPP/type_traits/is_null_pointer.h",
"src/__support/CPP/type_traits/is_pointer.h",
"src/__support/CPP/type_traits/is_reference.h",
"src/__support/CPP/type_traits/is_rvalue_reference.h",
"src/__support/CPP/type_traits/is_same.h",
"src/__support/CPP/type_traits/is_signed.h",
"src/__support/CPP/type_traits/is_trivially_constructible.h",
"src/__support/CPP/type_traits/is_trivially_copyable.h",
"src/__support/CPP/type_traits/is_trivially_destructible.h",
"src/__support/CPP/type_traits/is_union.h",
"src/__support/CPP/type_traits/is_unsigned.h",
"src/__support/CPP/type_traits/is_void.h",
"src/__support/CPP/type_traits/make_signed.h",
"src/__support/CPP/type_traits/make_unsigned.h",
"src/__support/CPP/type_traits/remove_all_extents.h",
"src/__support/CPP/type_traits/remove_cv.h",
"src/__support/CPP/type_traits/remove_cvref.h",
"src/__support/CPP/type_traits/remove_extent.h",
"src/__support/CPP/type_traits/remove_reference.h",
"src/__support/CPP/type_traits/true_type.h",
"src/__support/CPP/type_traits/type_identity.h",
"src/__support/CPP/type_traits/void_t.h",
"src/__support/CPP/utility/declval.h",
],
hdrs = ["src/__support/CPP/type_traits.h"],
deps = [
":__support_macros_attributes",
":__support_macros_config",
Expand All @@ -340,13 +294,7 @@ libc_support_library(

libc_support_library(
name = "__support_cpp_utility",
hdrs = [
"src/__support/CPP/utility.h",
"src/__support/CPP/utility/declval.h",
"src/__support/CPP/utility/forward.h",
"src/__support/CPP/utility/integer_sequence.h",
"src/__support/CPP/utility/move.h",
],
hdrs = ["src/__support/CPP/utility.h"],
deps = [
":__support_cpp_type_traits",
":__support_macros_attributes",
Expand Down