[Bug libstdc++/90415] [9/10 Regression] std::is_copy_constructible<std::tuple<std::any>> is incomplete
barry.revzin at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Mar 26 15:11:28 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90415
Barry Revzin <barry.revzin at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |barry.revzin at gmail dot com
--- Comment #11 from Barry Revzin <barry.revzin at gmail dot com> ---
Here's an interesting reduction:
#include <type_traits>
struct any {
any();
any(any const&);
template <class ValueType
, class Tp = std::decay_t<ValueType>
, class = std::enable_if_t<
!std::is_same<Tp, any>::value
&& std::is_copy_constructible<Tp>::value
#ifdef LIBSTDCXX
&& std::is_constructible<Tp, ValueType>::value
#endif
>
>
any(ValueType&& value);
};
struct X {
X(X const&);
X(any);
};
static_assert(std::is_copy_constructible_v<X>);
This compiles fine, fails if you add -DLIBSTDCXX. I laid it out this way
because libstdc++ has that check but libc++ doesn't. Although, this is
especially weird because in this program, there is only one instantiation of
any's constructor template and it's with ValueType=X const&, which means that
we're checking is_copy_constructible<X> && is_constructible<X, X const&>...
which should be identical and yet are somehow not.
More information about the Gcc-bugs
mailing list