about summary refs log tree commit diff
path: root/absl/types/variant.h
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2018-07-17T18·07-0700
committerAshley Hedberg <ahedberg@google.com>2018-07-17T18·32-0400
commite0def7473e52336f58759e11db4cd9467e5e0356 (patch)
tree1ab4c9e8ae1767f073dc86b51bac886fc536ad8e /absl/types/variant.h
parentf826f1d489b61b64df1d94afbe5981841a82e5fa (diff)
Export of internal Abseil changes.
--
ffe43f972f956e3f9a8fb7b68993d243ba8f79fb by Abseil Team <absl-team@google.com>:

Replace usage of soon-to-be-deprecated http_archive rule with Skylark equivalent
https://github.com/abseil/abseil-cpp/pull/138

PiperOrigin-RevId: 204939972

--
24021d7aec96ed013333760fba590eba5a9ddf63 by Abseil Team <absl-team@google.com>:

Remove incorrect constraint that StrSplit only works on std::strings; rather, it works on anything string-like.

PiperOrigin-RevId: 204761431

--
ce61d3b0ac163caa1156817f3d1a997d9376a3f3 by Derek Mauro <dmauro@google.com>:

Support s390/s390x in examine_stack.cc (GitHub issue #135).
This is UNTESTED (no machine to test on).

PiperOrigin-RevId: 204756692

--
68ecab659a95d713c4342fe9e8008c4cdf6abfc1 by Derek Mauro <dmauro@google.com>:

Update WORKSPACE.bazel Gogole Test dependency, remove the unused RE2 dependency.

PiperOrigin-RevId: 204741814

--
891e185522f0934e3b48a75617be5fc859d75dbd by Derek Mauro <dmauro@google.com>:

Fix endian_test.cc on big endian platforms.
GitHub issue #135

PiperOrigin-RevId: 204738726

--
9becfa12fbb525cd97e5695b94677bd3ea3f61b0 by Abseil Team <absl-team@google.com>:

Improve error messages in absl::variant by splitting up the conditions in the valid type static_assert.

This makes it slightly easier to determine what type is causing issues.

PiperOrigin-RevId: 204508430
GitOrigin-RevId: ffe43f972f956e3f9a8fb7b68993d243ba8f79fb
Change-Id: Icc5e4e8cd1a4cea98dfbed794cd992b734812e1d
Diffstat (limited to 'absl/types/variant.h')
-rw-r--r--absl/types/variant.h15
1 files changed, 10 insertions, 5 deletions
diff --git a/absl/types/variant.h b/absl/types/variant.h
index 9d98a9ed0edb..17e0634de037 100644
--- a/absl/types/variant.h
+++ b/absl/types/variant.h
@@ -449,14 +449,19 @@ constexpr bool operator!=(monostate, monostate) noexcept { return false; }
 //------------------------------------------------------------------------------
 template <typename T0, typename... Tn>
 class variant<T0, Tn...> : private variant_internal::VariantBase<T0, Tn...> {
+  static_assert(absl::conjunction<std::is_object<T0>,
+                                  std::is_object<Tn>...>::value,
+                "Attempted to instantiate a variant containing a non-object "
+                "type.");
   // Intentionally not qualifing `negation` with `absl::` to work around a bug
   // in MSVC 2015 with inline namespace and variadic template.
-  static_assert(absl::conjunction<std::is_object<T0>, std::is_object<Tn>...,
-                                  negation<std::is_array<T0> >,
-                                  negation<std::is_array<Tn> >...,
-                                  std::is_nothrow_destructible<T0>,
+  static_assert(absl::conjunction<negation<std::is_array<T0> >,
+                                  negation<std::is_array<Tn> >...>::value,
+                "Attempted to instantiate a variant containing an array type.");
+  static_assert(absl::conjunction<std::is_nothrow_destructible<T0>,
                                   std::is_nothrow_destructible<Tn>...>::value,
-                "Attempted to instantiate a variant with an unsupported type.");
+                "Attempted to instantiate a variant containing a non-nothrow "
+                "destructible type.");
 
   friend struct variant_internal::VariantCoreAccess;