https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105790
Bug ID: 105790 Summary: cannot constructor std::tuple of non-movable types with conversions Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: hui.xie1990 at gmail dot com Target Milestone: --- ``` #include <tuple> struct Immovable{ Immovable() = default; Immovable(Immovable&&) = delete; }; struct ConvToImmovable{ operator Immovable() const { return Immovable{};} }; void test(){ std::tuple<Immovable> t{ConvToImmovable{}}; } ``` The above code does not compile. /opt/compiler-explorer/gcc-trunk-20220531/include/c++/13.0.0/tuple:91:11: error: use of deleted function 'Immovable::Immovable(Immovable&&)' 91 | : _M_head_impl(std::forward<_UHead>(__h)) { } | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <source>:5:5: note: declared here 5 | Immovable(Immovable&&) = delete; According to the spec, as Immovable IS constructible from ConvToImmovable, so the tuple's constructor that takes (UTypes&&...) should work.