Iros
 
Loading...
Searching...
No Matches
not_fn.h
Go to the documentation of this file.
1#pragma once
2
6#include "di/meta/util.h"
7#include "di/types/in_place.h"
8#include "di/util/forward.h"
9#include "di/util/move.h"
10
11namespace di::function {
12namespace detail {
13 template<typename F>
15 private:
16 F m_function;
17
18 public:
19 template<typename Fn>
20 constexpr NotFnFunction(types::InPlace, Fn&& function) : m_function(util::forward<Fn>(function)) {}
21
22 constexpr NotFnFunction(NotFnFunction const&) = default;
23 constexpr NotFnFunction(NotFnFunction&&) = default;
24
25 constexpr auto operator=(NotFnFunction const&) -> NotFnFunction& = delete;
26 constexpr auto operator=(NotFnFunction&&) -> NotFnFunction& = delete;
27
28 template<typename... Args>
29 constexpr auto operator()(Args&&... args) & -> decltype(!function::invoke(m_function,
30 util::forward<Args>(args)...)) {
31 return !function::invoke(m_function, util::forward<Args>(args)...);
32 }
33
34 template<typename... Args>
35 constexpr auto operator()(Args&&... args) const& -> decltype(!function::invoke(m_function,
36 util::forward<Args>(args)...)) {
37 return !function::invoke(m_function, util::forward<Args>(args)...);
38 }
39
40 template<typename... Args>
41 constexpr auto operator()(Args&&... args) && -> decltype(!function::invoke(util::move(m_function),
42 util::forward<Args>(args)...)) {
43 return !function::invoke(util::move(m_function), util::forward<Args>(args)...);
44 }
45
46 template<typename... Args>
47 constexpr auto operator()(Args&&... args) const&& -> decltype(!function::invoke(util::move(m_function),
48 util::forward<Args>(args)...)) {
49 return !function::invoke(util::move(m_function), util::forward<Args>(args)...);
50 }
51 };
52}
53
54template<concepts::DecayConstructible F>
55constexpr auto not_fn(F&& function) {
57}
58}
59
60namespace di {
62}
constexpr auto operator=(NotFnFunction &&) -> NotFnFunction &=delete
constexpr NotFnFunction(types::InPlace, Fn &&function)
Definition not_fn.h:20
constexpr auto operator=(NotFnFunction const &) -> NotFnFunction &=delete
constexpr auto operator()(Args &&... args) &&-> decltype(!function::invoke(util::move(m_function), util::forward< Args >(args)...))
Definition not_fn.h:41
constexpr NotFnFunction(NotFnFunction &&)=default
constexpr auto operator()(Args &&... args) &-> decltype(!function::invoke(m_function, util::forward< Args >(args)...))
Definition not_fn.h:29
constexpr NotFnFunction(NotFnFunction const &)=default
constexpr auto operator()(Args &&... args) const &-> decltype(!function::invoke(m_function, util::forward< Args >(args)...))
Definition not_fn.h:35
constexpr auto operator()(Args &&... args) const &&-> decltype(!function::invoke(util::move(m_function), util::forward< Args >(args)...))
Definition not_fn.h:47
Definition bind_back.h:16
Definition as_bool.h:8
constexpr auto invoke
Definition invoke.h:100
constexpr auto not_fn(F &&function)
Definition not_fn.h:55
constexpr auto in_place
Definition in_place.h:8
Definition vocab.h:96
Definition zstring_parser.h:9
Definition in_place.h:4