Skip to content

Defaulted VC++ workaround #7

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: v1
Choose a base branch
from
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