Skip to content

Commit f530974

Browse files
committed
Synopsis with full class definitions
1 parent 5deb52d commit f530974

File tree

3 files changed

+51
-12
lines changed

3 files changed

+51
-12
lines changed

provides/include/dumpster_v1/finally.hpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,21 @@
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

2123
template <class Action>
2224
dumpster_v1::finally_t<std::remove_cvref_t<Action>>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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+
};

provides/include/dumpster_v1/synopsis.hpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,25 @@
11
#pragma once
22

3-
#include "polyfill_v1/type_traits.hpp"
3+
#include "dumpster_v1/private.hpp"
44

55
namespace 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.
1325
template <class Action>

0 commit comments

Comments
 (0)