[Bug c++/70832] move-assignment of lambdas calls copy-assignment for captures
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Apr 28 08:23:00 GMT 2016
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{}]{};
^
More information about the Gcc-bugs
mailing list