https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117858
--- Comment #9 from Jonathan Wakely <redi at gcc dot gnu.org> --- Looks like a copy & paste error in r15-2309-g6d86486292acbe: --- 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, remove_cvref_t<_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, remove_cvref_t<_Up>>) && is_constructible_v<_Tp, _Up> && is_assignable_v<_Tp&, _Up> && (!__converts_from_optional<_Tp, _Up>::value)