[libcxx-commits] [PATCH] D105597: [libcxx][nfc] Remove <variant>'s dependence on <array>.
Zoe Carver via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Thu Jul 8 09:12:25 PDT 2021
zoecarver updated this revision to Diff 357247.
zoecarver marked 8 inline comments as done.
zoecarver added a comment.
Apply review feedback.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D105597/new/
https://reviews.llvm.org/D105597
Files:
libcxx/include/variant
Index: libcxx/include/variant
===================================================================
--- libcxx/include/variant
+++ libcxx/include/variant
@@ -203,7 +203,6 @@
#include <__config>
#include <__utility/forward.h>
#include <__tuple>
-#include <array>
#include <compare>
#include <exception>
#include <functional>
@@ -238,6 +237,19 @@
// Remove this once we drop support for GCC 5.
#if _LIBCPP_STD_VER > 14 && !(defined(_LIBCPP_COMPILER_GCC) && _GNUC_VER_NEW < 6000)
+// In all the places that __light_array is used, _Tp is always a function pointer or
+// a __light_array.
+template<class _Tp, size_t _Size>
+struct __light_array {
+ static_assert(_Size > 0, "Did you expect an element to be stored?");
+ _Tp __buf_[_Size] = {};
+
+ _LIBCPP_INLINE_VISIBILITY constexpr
+ const _Tp &operator[](size_t __n) const noexcept {
+ return __buf_[__n];
+ }
+};
+
_LIBCPP_NORETURN
inline _LIBCPP_INLINE_VISIBILITY
_LIBCPP_AVAILABILITY_THROW_BAD_VARIANT_ACCESS
@@ -498,7 +510,7 @@
template <class _Tp, size_t _Np, typename... _Indices>
inline _LIBCPP_INLINE_VISIBILITY
- static constexpr auto&& __at(const array<_Tp, _Np>& __elems,
+ static constexpr auto&& __at(const __light_array<_Tp, _Np>& __elems,
size_t __index, _Indices... __indices) {
return __at(__elems[__index], __indices...);
}
@@ -514,7 +526,7 @@
inline _LIBCPP_INLINE_VISIBILITY
static constexpr auto __make_farray(_Fs&&... __fs) {
__std_visit_visitor_return_type_check<__uncvref_t<_Fs>...>();
- using __result = array<common_type_t<__uncvref_t<_Fs>...>, sizeof...(_Fs)>;
+ using __result = __light_array<common_type_t<__uncvref_t<_Fs>...>, sizeof...(_Fs)>;
return __result{{_VSTD::forward<_Fs>(__fs)...}};
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D105597.357247.patch
Type: text/x-patch
Size: 1778 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20210708/ea9e3f6d/attachment-0001.bin>
More information about the libcxx-commits
mailing list