33#ifndef BEMAN_SCOPE_HPP
44#define BEMAN_SCOPE_HPP
55
6+ #include < type_traits>
7+ #include < utility>
8+
9+ #include < experimental/scope>
10+
611namespace beman ::scope {
712
813// -- 7.6.7 Feature test macro --
@@ -13,22 +18,39 @@ namespace beman::scope {
1318// -- 7.5.1 Header <scope> synopsis [scope.syn] --
1419//
1520// namespace std {
21+
1622// template <class EF>
1723// class scope_exit;
18- //
24+ template <class EF >
25+ using scope_exit = std::experimental::scope_exit<EF>;
26+
1927// template <class EF>
2028// class scope_fail;
21- //
29+ template <class EF >
30+ using scope_fail = std::experimental::scope_fail<EF>;
31+
2232// template <class EF>
2333// class scope_success;
24- //
34+ template <class EF >
35+ using scope_success = std::experimental::scope_success<EF>;
36+
2537// template <class R, class D>
2638// class unique_resource;
27- //
39+ template <class R , class D >
40+ using unique_resource = std::experimental::unique_resource<R, D>;
41+
2842// // factory function
2943// template <class R, class D, class S = decay_t<R>>
3044// unique_resource<decay_t<R>, decay_t<D>>
3145// make_unique_resource_checked(R&& r, const S& invalid, D&& d) noexcept(see below);
46+
47+ template <class R , class D , class S = std::decay_t <R>>
48+ unique_resource<std::decay_t <R>, std::decay_t <D>>
49+ make_unique_resource_checked (R&& r, const S& invalid, D&& d) noexcept (noexcept (
50+ std::experimental::make_unique_resource_checked (std::forward(r), std::forward(invalid), std::forward(d)))) {
51+ return std::experimental::make_unique_resource_checked (std::forward (r), std::forward (invalid), std::forward (d));
52+ }
53+
3254// } // namespace std
3355//
3456
@@ -59,7 +81,6 @@ namespace beman::scope {
5981// template <class EF>
6082// scope_guard(EF) -> scope_guard<EF>;
6183//
62-
6384// -- 7.6.1 Class template unique_resource [scope.unique_resource.class] --
6485//
6586// template <class R, class D>
@@ -93,33 +114,6 @@ namespace beman::scope {
93114// template <typename R, typename D>
94115// unique_resource(R, D) -> unique_resource<R, D>;
95116
96- // TODO: Implement
97- struct scope_exit {
98- template <typename F>
99- scope_exit (F) {}
100- ~scope_exit () {
101- // TODO: Cleanup
102- }
103- };
104-
105- // TODO: Implement
106- struct scope_fail {
107- template <typename F>
108- scope_fail (F) {}
109- ~scope_fail () {
110- // TODO: Cleanup
111- }
112- };
113-
114- // TODO: Implement
115- struct scope_success {
116- template <typename F>
117- scope_success (F) {}
118- ~scope_success () {
119- // TODO: Cleanup
120- }
121- };
122-
123117} // namespace beman::scope
124118
125119#endif // BEMAN_SCOPE_HPP
0 commit comments