https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84849
Zhihao Yuan <lichray at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |lichray at gmail dot com --- Comment #6 from Zhihao Yuan <lichray at gmail dot com> --- Here is a possibly related case: #include <tuple> template <class T> struct pair { using value_type = pair<std::remove_reference_t<T>>; T a, b; constexpr pair& operator=(value_type const& other) { a = other.a; b = other.b; return *this; } constexpr pair& operator=(value_type&& other) { a = std::move(other.a); b = std::move(other.b); return *this; } }; template <class T> constexpr pair<T&> tie(T& a, T& b) noexcept { return { a, b }; } int main() { int a = 3; int b = 5; tie(a, b) = { b, a % b }; // works tie(a, b) = { b, a }; // wat } Error messages are very similar https://godbolt.org/z/4FSeOO.