-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
It seems that std::not_fn should reject the following code according to [func.not.fn]:
Mandates:
is_constructible_v<FD, F> && is_move_constructible_v<FD>istrue.
#include <functional>
struct OnlyCopyableFun {
OnlyCopyableFun() = default;
OnlyCopyableFun(const OnlyCopyableFun&) = default;
OnlyCopyableFun(OnlyCopyableFun&&) = delete;
bool operator()(auto) const;
};
int main() {
OnlyCopyableFun f;
auto nf = std::not_fn(f); // only ill-formed in libc++
}Feel free to correct me if I've missed something.
Not quite sure why these standard call wrapper factories (std::bind_front, std::bind, etc.) require all argument types to be move-constructible, although the call wrapper produced in the above example is still move-constructible as its underlying type has a copy constructor.
It seems to me that just requiring is_constructible_v<FD, F> is enough, which is what the range adaptor object does.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working