https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117858
--- Comment #10 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Actually it should be:
--- a/libstdc++-v3/include/std/optional
+++ b/libstdc++-v3/include/std/optional
@@ -1043,7 +1043,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Up>
#ifdef _GLIBCXX_USE_CONSTRAINTS_FOR_OPTIONAL
- requires (!is_same_v<optional, remove_cvref_t<_Up>>)
+ requires (!is_same_v<_Tp, _Up>)
&& is_constructible_v<_Tp, const _Up&>
&& is_assignable_v<_Tp&, const _Up&>
&& (!__converts_from_optional<_Tp, _Up>::value)
@@ -1077,7 +1077,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Up>
#ifdef _GLIBCXX_USE_CONSTRAINTS_FOR_OPTIONAL
- requires (!is_same_v<optional, remove_cvref_t<_Up>>)
+ requires (!is_same_v<_Tp, _Up>)
&& is_constructible_v<_Tp, _Up>
&& is_assignable_v<_Tp&, _Up>
&& (!__converts_from_optional<_Tp, _Up>::value)