https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94062
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|libstdc++ |c++ --- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> --- Reduced to remove any libstdc++ code: template<typename T> T&& forward(T& t) { return static_cast<T&&>(t); } template<typename T> struct tuple : T { template<typename U> tuple(U&& u) : T(forward<U>(u)) { } }; struct Bar1 { Bar1(const Bar1&) = delete; Bar1(Bar1&&) = delete; }; struct Foo1 { operator Bar1() const; }; int main() { tuple<Bar1> t{ Foo1{} }; } With -std=c++17: 94062.cc: In instantiation of 'tuple<T>::tuple(U&&) [with U = Foo1; T = Bar1]': 94062.cc:25:25: required from here 94062.cc:8:24: error: use of deleted function 'Bar1::Bar1(Bar1&&)' 8 | : T(forward<U>(u)) | ^ 94062.cc:15:5: note: declared here 15 | Bar1(Bar1&&) = delete; | ^~~~ EDG also rejects it: "94062.cc", line 8: error: function "Bar1::Bar1(Bar1 &&)" (declared at line 15) cannot be referenced -- it is a deleted function : T(forward<U>(u)) ^ detected during instantiation of "tuple<T>::tuple(U &&) [with T=Bar1, U=Foo1]" at line 25 1 error detected in the compilation of "94062.cc". But MSVC and Clang compile it in C++17 mode.