Use simpler tags for ctor dispatch in exception_wrapper
[folly.git] / folly / ExceptionWrapper.h
index 0d028714231fa5ad6fde57055c41b6734b13356f..36913d85db9509088ed10475a004d960e7b11eb9 100644 (file)
@@ -235,18 +235,16 @@ class exception_wrapper final {
     Ex const& as() const noexcept;
   };
 
-  enum class Placement { kInSitu, kOnHeap };
+  struct InSituTag {};
+  struct OnHeapTag {};
+
   template <class T>
-  using PlacementOf = std::integral_constant<
-      Placement,
+  using PlacementOf = _t<std::conditional<
       sizeof(T) <= sizeof(Buffer::Storage) &&
-              alignof(T) <= alignof(Buffer::Storage) &&
-              noexcept(T(std::declval<T&&>()))
-          ? Placement::kInSitu
-          : Placement::kOnHeap>;
-
-  using InSituTag = std::integral_constant<Placement, Placement::kInSitu>;
-  using OnHeapTag = std::integral_constant<Placement, Placement::kOnHeap>;
+          alignof(T) <= alignof(Buffer::Storage) &&
+          noexcept(T(std::declval<T&&>())),
+      InSituTag,
+      OnHeapTag>>;
 
   static std::exception const* as_exception_or_null_(std::exception const& ex);
   static std::exception const* as_exception_or_null_(AnyException);