OSDN Git Service

[libc++] Support immovable return types in std::function.
authorArthur O'Dwyer <arthur.j.odwyer@gmail.com>
Mon, 11 Jan 2021 21:29:17 +0000 (16:29 -0500)
committerArthur O'Dwyer <arthur.j.odwyer@gmail.com>
Tue, 26 Jan 2021 00:34:41 +0000 (19:34 -0500)
commitf9b6fd269b6fd2b085c3537b6730a02503430ef0
treedfd63821c00a6dc7f46d51dee814c141b0462ebb
parent70e251497c4e26f8cfd85e745459afff97c909ce
[libc++] Support immovable return types in std::function.

LWG reflector consensus is that this was a bug in libc++.
(In particular, MSVC also will fix it in their STL, soon.)
Bug originally discovered by Logan Smith.

Also fix `std::function<const void()>`, which should work
the same way as `std::function<void()>` in terms of allowing
"conversions" from non-void types.

Differential Revision: https://reviews.llvm.org/D94452
libcxx/include/__functional_base
libcxx/include/functional
libcxx/include/type_traits
libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/noncopyable_return_type.pass.cpp [new file with mode: 0644]