File tree Expand file tree Collapse file tree 3 files changed +77
-0
lines changed
provides/include/dumpster_v1 Expand file tree Collapse file tree 3 files changed +77
-0
lines changed Original file line number Diff line number Diff line change 1+ #include " dumpster_v1/defaulted.hpp"
2+
3+ #include " testing_v1/test.hpp"
4+
5+ using namespace testing_v1 ;
6+
7+ auto defaulted_test = test([]() {
8+ {
9+ dumpster_v1::defaulted<int , 42 > x;
10+ verify (x.value == 42 );
11+ x = 101 ;
12+ verify (x == 101 );
13+ }
14+ {
15+ dumpster_v1::defaulted<short , 42 > x (short (101 ));
16+ verify (x == 101 );
17+ }
18+ {
19+ const dumpster_v1::zeroed<std::size_t > x;
20+ verify (x == 0 );
21+ }
22+ {
23+ dumpster_v1::zeroed<char *> x;
24+ verify (x == nullptr );
25+ }
26+ });
Original file line number Diff line number Diff line change 1+ #pragma once
2+
3+ #include " dumpster_v1/synopsis.hpp"
4+
5+ #include < utility>
6+
7+ template <class Value , auto ... defaults>
8+ dumpster_v1::defaulted<Value, defaults...>::defaulted() : value(defaults...) {}
9+
10+ template <class Value , auto ... defaults>
11+ template <class ... Arguments>
12+ dumpster_v1::defaulted<Value, defaults...>::defaulted(Arguments &&... arguments)
13+ : value(std::forward<Arguments>(arguments)...) {}
14+
15+ template <class Value , auto ... defaults>
16+ dumpster_v1::defaulted<Value, defaults...>::operator const Value &() const {
17+ return value;
18+ }
19+
20+ template <class Value , auto ... defaults>
21+ dumpster_v1::defaulted<Value, defaults...>::operator Value &() {
22+ return value;
23+ }
Original file line number Diff line number Diff line change 44
55namespace dumpster_v1 {
66
7+ // defaulted.hpp ===============================================================
8+
9+ // Default initializes a value with the given arguments.
10+ template <class Value , auto ... defaults> struct defaulted {
11+ // / Default constructor initializes value with the defaults given as template
12+ // / arguments.
13+ defaulted ();
14+
15+ // / Non-default constructor initializes value with given arguments.
16+ template <class ... Arguments> defaulted (Arguments &&... arguments);
17+
18+ // / Implicit conversion to const reference for convenience.
19+ operator const Value &() const ;
20+
21+ // / Implicit conversion to reference for convenience.
22+ operator Value &();
23+
24+ // / The value is directly accessible as there is no reason to hide it.
25+ Value value;
26+ };
27+
28+ // Zero initializes a value of the given type.
29+ template <class Value >
30+ using zeroed =
31+ defaulted<Value,
32+ std::conditional_t <std::is_pointer_v<Value>, std::nullptr_t , int >(
33+ 0 )>;
34+
735// finally.hpp =================================================================
836
937// / Finalizer that invokes stored action when destroyed.
You can’t perform that action at this time.
0 commit comments