[libcxx-commits] [libcxx] [libc++] Fix std::variant evaluating template arguments too eagerly (PR #151028)

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Thu Jul 31 06:19:48 PDT 2025


================
@@ -1182,13 +1182,21 @@ public:
   _LIBCPP_HIDE_FROM_ABI constexpr variant(const variant&) = default;
   _LIBCPP_HIDE_FROM_ABI constexpr variant(variant&&)      = default;
 
-  template < class _Arg,
----------------
ldionne wrote:

I would suggest this instead, which is easier to read IMO:

```c++
template <class _Arg, class _DependentArg = enable_if_t<
    !is_same_v<__remove_cvref_t<_Arg>, variant> &&
    !__is_inplace_type<__remove_cvref_t<_Arg>>::value &&
    !__is_inplace_index<__remove_cvref_t<_Arg>>::value,
    _Arg
  >,
  class _Tp = __variant_detail::__best_match_t<_DependentArg, _Types...>,
  size_t _Ip = __find_detail::__find_unambiguous_index_sfinae<_Tp, _Types...>::value,
  enable_if_t<is_constructible_v<_Tp, _Arg>, int> = 0
>
```

https://github.com/llvm/llvm-project/pull/151028


More information about the libcxx-commits mailing list