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);