Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<typename Callable>
- constexpr auto invert(Callable&& callable) noexcept {
- return[func = std::move(callable)] <typename...Args> (Args&&... args) ->std::invoke_result_t<Callable, Args...> {
- return not std::invoke(func, std::forward<Args>(args)...);
- };
- }
- //Версия от Георгия Яковлева
- //upd -- убрал [[nodiscard]] после requires, потому что с ним не всюду работает
- template<typename Callable>
- [[nodiscard]] constexpr auto invert(Callable&& callable)
- noexcept(std::is_nothrow_move_assignable_v<Callable>)
- {
- return [func = std::move(callable)]<typename...Args> requires std::invocable<Callable, Args...>
- (Args&&...args) noexcept(std::is_nothrow_invocable_v<Callable, Args...>) -> std::invoke_result_t<Callable, Args...> {
- return not std::invoke(func, std::forward<Args>(args)...);
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement