NamedType: add defaults and make sure state stays valid #193
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I think the first part of this is fairly obvious and worth merging soon, but i'm not sure about the move stuff.
getNamedTypeDefault
is different fromgetDefault
for two reasons:getNamedTypeDefault
is just to make default-constructed values valid, whereasgetDefault
is used for ADM defaults. Sometimes these are the same, but not always.I considered having
getNamedTypeDefault
return the underlying value, bu this is a bit messier to write (more types, and you need to specify the tag).I'm not sure if the defaults should be inlined or not. They seem like a good thing to inline, it's really part of the interface, and most types will use the default implementation, which will be inlined anyway.
The main reason i'm not sure about the move stuff is that the new
T get() &&
will sometimes get called when you call.get()
on a temporary, which is not ideal because it results in a call togetNamedTypeDefault
and the validator. This means that it is absolutely necessary to implementgetNamedTypeDefault
for types with validators which don't accept default-constructed values, as otherwise.get()
can throw a cryptic error.