diff options
| author | Lily <47812810+LilyWangL@users.noreply.github.com> | 2020-04-18 05:15:00 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-04-17 14:15:00 -0700 |
| commit | 87ebede04135a7effa1b55c22d1b194282f6603e (patch) | |
| tree | 1cd73c109d1fe4547648d56adf9ca7ac0c0fa3a0 /ports/abseil/fix-MSVCbuildfail.patch | |
| parent | 4d8237b89ccefca3e50000406eebdc36d27aac07 (diff) | |
| download | vcpkg-87ebede04135a7effa1b55c22d1b194282f6603e.tar.gz vcpkg-87ebede04135a7effa1b55c22d1b194282f6603e.zip | |
[abseil] Fix CompressedTuple move constructor on MSVC (#10721)
* [abseil] Fix CompressedTuple move constructor on MSVC
* [abseil] Add comment for new patch
Diffstat (limited to 'ports/abseil/fix-MSVCbuildfail.patch')
| -rw-r--r-- | ports/abseil/fix-MSVCbuildfail.patch | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/ports/abseil/fix-MSVCbuildfail.patch b/ports/abseil/fix-MSVCbuildfail.patch new file mode 100644 index 000000000..7c041c27b --- /dev/null +++ b/ports/abseil/fix-MSVCbuildfail.patch @@ -0,0 +1,65 @@ +diff --git a/absl/container/internal/compressed_tuple.h b/absl/container/internal/compressed_tuple.h +index 4bfe92f..02bfd03 100644 +--- a/absl/container/internal/compressed_tuple.h ++++ b/absl/container/internal/compressed_tuple.h +@@ -169,9 +169,33 @@ constexpr bool ShouldAnyUseBase() { + } + + template <typename T, typename V> +-using TupleMoveConstructible = typename std::conditional< +- std::is_reference<T>::value, std::is_convertible<V, T>, +- std::is_constructible<T, V&&>>::type; ++using TupleElementMoveConstructible = ++ typename std::conditional<std::is_reference<T>::value, ++ std::is_convertible<V, T>, ++ std::is_constructible<T, V&&>>::type; ++ ++template <bool SizeMatches, class T, class... Vs> ++struct TupleMoveConstructible : std::false_type {}; ++ ++template <class... Ts, class... Vs> ++struct TupleMoveConstructible<true, CompressedTuple<Ts...>, Vs...> ++ : std::integral_constant< ++ bool, absl::conjunction< ++ TupleElementMoveConstructible<Ts, Vs&&>...>::value> {}; ++ ++template <typename T> ++struct compressed_tuple_size; ++ ++template <typename... Es> ++struct compressed_tuple_size<CompressedTuple<Es...>> ++ : public std::integral_constant<std::size_t, sizeof...(Es)> {}; ++ ++template <class T, class... Vs> ++struct TupleItemsMoveConstructible ++ : std::integral_constant< ++ bool, TupleMoveConstructible<compressed_tuple_size<T>::value == ++ sizeof...(Vs), ++ T, Vs...>::value> {}; + + } // namespace internal_compressed_tuple + +@@ -217,17 +241,18 @@ class ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTuple + explicit constexpr CompressedTuple(const Ts&... base) + : CompressedTuple::CompressedTupleImpl(absl::in_place, base...) {} + +- template <typename... Vs, ++ template <typename First, typename... Vs, + absl::enable_if_t< + absl::conjunction< + // Ensure we are not hiding default copy/move constructors. + absl::negation<std::is_same<void(CompressedTuple), +- void(absl::decay_t<Vs>...)>>, +- internal_compressed_tuple::TupleMoveConstructible< +- Ts, Vs&&>...>::value, ++ void(absl::decay_t<First>)>>, ++ internal_compressed_tuple::TupleItemsMoveConstructible< ++ CompressedTuple<Ts...>, First, Vs...>>::value, + bool> = true> +- explicit constexpr CompressedTuple(Vs&&... base) ++ explicit constexpr CompressedTuple(First&& first, Vs&&... base) + : CompressedTuple::CompressedTupleImpl(absl::in_place, ++ absl::forward<First>(first), + absl::forward<Vs>(base)...) {} + + template <int I> |
