https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116440

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ppalka at gcc dot gnu.org

--- Comment #6 from Patrick Palka <ppalka at gcc dot gnu.org> ---
A simpler related testcase that we incorrectly reject in C++20 mode:

  static_assert(std::is_constructible_v<std::any,
std::tuple<std::tuple<std::any>>>);

The errors look like:

.../include/tuple:911:34: error: the value of
‘std::is_constructible_v<std::any, std::tuple<std::tuple<std::any> > >’ is not
usable in a constant express
ion                                                                             
  911 |               else if constexpr (is_constructible_v<_Tp, _Tuple>)      
                                                                               
                                                         |                     
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                     
.../include/tuple:1014:51: error: ‘static consteval bool std::tuple<
<template-parameter-1-1> >::__use_other_ctor() [with _Tuple =
std::tuple<std::tuple<
std::any> >; _Elements = {std::any}]’ called in a constant expression
 1014 |           && (!__use_other_ctor<tuple<_UTypes...>>())
      |                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~


For whatever reason this is fixed by:

diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple
index 34d790fd6f5..f971c527084 100644
--- a/libstdc++-v3/include/std/tuple
+++ b/libstdc++-v3/include/std/tuple
@@ -1011,7 +1011,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION

       template<typename... _UTypes>
        requires (__constructible<_UTypes...>())
-         && (!__use_other_ctor<tuple<_UTypes...>>())
+         && (!__use_other_ctor<tuple<_UTypes...>&&>())
          && (!__dangles<_UTypes...>())
        constexpr explicit(!__convertible<_UTypes...>())
        tuple(tuple<_UTypes...>&& __u)
@@ -1021,7 +1021,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION

       template<typename... _UTypes>
        requires (__constructible<_UTypes...>())
-         && (!__use_other_ctor<tuple<_UTypes...>>())
+         && (!__use_other_ctor<tuple<_UTypes...>&&>())
          && (__dangles<_UTypes...>())
        tuple(tuple<_UTypes...>&&) = delete;

Doesn't help with the original testcase though.

Reply via email to