Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions internals/tests/testing/defaulted_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,12 @@ auto defaulted_test = test([]() {
dumpster_v1::zeroed<char *> x;
verify(x == nullptr);
}
{
dumpster_v1::zeroed<uint8_t> x;
dumpster_v1::zeroed<uint8_t> y = x;
y += 1;
x = y;
x = 2 * y + 1;
verify(3 == x);
}
});
7 changes: 7 additions & 0 deletions provides/include/dumpster_v1/defaulted.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,10 @@ template <class Value, auto... defaults>
dumpster_v1::defaulted<Value, defaults...>::operator Value &() {
return value;
}

template <class Value, auto... defaults>
template <class Forwardable>
Value &dumpster_v1::defaulted<Value, defaults...>::
operator=(Forwardable &&rhs) {
return value = std::forward<Forwardable>(rhs);
}
3 changes: 3 additions & 0 deletions provides/include/dumpster_v1/synopsis.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ template <class Value, auto... defaults> struct defaulted {
/// Implicit conversion to reference for convenience.
operator Value &();

/// Assigns given `rhs` to `value` member.
template <class Forwardable> Value &operator=(Forwardable &&rhs);

/// The value is directly accessible as there is no reason to hide it.
Value value;
};
Expand Down