File tree Expand file tree Collapse file tree 3 files changed +51
-12
lines changed
provides/include/dumpster_v1 Expand file tree Collapse file tree 3 files changed +51
-12
lines changed Original file line number Diff line number Diff line change 44
55#include < utility>
66
7- template <class Action > struct dumpster_v1 ::finally_t {
8- ~finally_t () { m_action (); }
7+ template <class Action > dumpster_v1::Private::finally_t <Action>::~finally_t () {
8+ m_action ();
9+ }
910
10- template <class ForwardableAction >
11- finally_t (ForwardableAction &&action)
12- : m_action(std::forward<ForwardableAction>(action)) {}
11+ template <class Action >
12+ template <class ForwardableAction >
13+ dumpster_v1::Private::finally_t <Action>::finally_t (ForwardableAction &&action)
14+ : m_action(std::forward<ForwardableAction>(action)) {}
1315
14- finally_t (const finally_t &) = delete ;
15- finally_t operator =(const finally_t &) = delete ;
16+ template <class Action > dumpster_v1::finally_t <Action>::~finally_t () {}
1617
17- private:
18- std::conditional_t <std::is_function_v<Action>, Action *, Action> m_action;
19- };
18+ template <class Action >
19+ template <class ForwardableAction >
20+ dumpster_v1::finally_t <Action>::finally_t (ForwardableAction &&action)
21+ : Private::finally_t <Action>(std::forward<ForwardableAction>(action)) {}
2022
2123template <class Action >
2224dumpster_v1::finally_t <std::remove_cvref_t <Action>>
Original file line number Diff line number Diff line change 1+ #pragma once
2+
3+ #include " polyfill_v1/type_traits.hpp"
4+
5+ namespace dumpster_v1 {
6+
7+ template <class Value > struct finally_t ;
8+
9+ class Private {
10+ template <class > friend struct finally_t ;
11+
12+ template <class Value > class finally_t ;
13+ };
14+
15+ } // namespace dumpster_v1
16+
17+ template <class Action > class dumpster_v1 ::Private::finally_t {
18+ template <class > friend struct dumpster_v1 ::finally_t ;
19+
20+ ~finally_t ();
21+
22+ template <class ForwardableAction > finally_t (ForwardableAction &&action);
23+
24+ std::conditional_t <std::is_function_v<Action>, Action *, Action> m_action;
25+ };
Original file line number Diff line number Diff line change 11#pragma once
22
3- #include " polyfill_v1/type_traits .hpp"
3+ #include " dumpster_v1/private .hpp"
44
55namespace dumpster_v1 {
66
77// finally.hpp =================================================================
88
99// / Finalizer that invokes stored action when destroyed.
10- template <class Action > struct finally_t ;
10+ template <class Action > struct finally_t : Private::finally_t <Action> {
11+ // / Calls the finalizing action given to the constructor.
12+ ~finally_t ();
13+
14+ // / Constructs a finalizer from the given finalizing action.
15+ template <class ForwardableAction > finally_t (ForwardableAction &&action);
16+
17+ // / Finalizers are not CopyConstructible.
18+ finally_t (const finally_t &) = delete ;
19+
20+ // / Finalizers are not CopyAssignable.
21+ finally_t &operator =(const finally_t &) = delete ;
22+ };
1123
1224// / Creates a finalizer that invokes the action when destroyed.
1325template <class Action >
You can’t perform that action at this time.
0 commit comments