https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70832

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |rejects-valid
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2016-04-28
     Ever confirmed|0                           |1

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
namespace std {
template<typename T> struct remove_reference { using type = T; };
template<typename T> struct remove_reference<T&> { using type = T; };
template<typename T> struct remove_reference<T&&> { using type = T; };

template <class T>
    constexpr typename remove_reference<T>::type&&
    move(T&& t) noexcept
    { return static_cast<typename remove_reference<T>::type&&>(t); }
}

int main() {
    struct move_only {
        move_only() = default;
        move_only(const move_only&) = delete;
        move_only(move_only&&) = default;
        move_only& operator=(const move_only&) = delete;
        move_only& operator=(move_only&&) = default;
    };
    auto lambda = [test = move_only{}]{};
    auto lambda_moved = std::move(lambda);
    lambda = std::move(lambda_moved);
}

move.cc: In function ‘int main()’:
move.cc:22:36: error: use of deleted function ‘main()::<lambda()>&
main()::<lambda()>::operator=(const main()::<lambda()>&)’
     lambda = std::move(lambda_moved);
                                    ^
move.cc:20:38: note: a lambda closure type has a deleted copy assignment
operator
     auto lambda = [test = move_only{}]{};
                                      ^

Reply via email to