Use dynamic cast on reference when should not fail #176
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.
There is a common pattern in our code where we dynamically cast a pointer and assert that it is not null. This pattern implies that the cast should not fail. Therefore, we can use the reference version of dynamic casting, which throws a
std::bad_cast
exception if the cast fails.Additionally, we are using dynamic casting with unique pointers, which requires a manual
get()
to obtain the underlying pointer. Sinceget()
should only be used when necessary, this change also eliminates its use.Notice that
static_cast
has been replaced bydynamic_cast
. This is because there is a concern that the static cast might not be valid, so we are still relying on the dynamic check.Note
The remaining use cases are those where we use dynamic checks with an
if
to verify whether an object is of a certain type, which is expected to fail.