Conversation
…here are no arguments to forward.
…ersions. For now we don't implement any converions other than array-to-pointer, but we will add conversions in a later commit.
MathiasVP
force-pushed
the
fix-forward-interpretation
branch
from
September 22, 2026 18:19
3602750 to
0f32801
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
In #22532 we added support for specifying whether a modelled function forward all its arguments. However, we implemented very some naive logic for identifying the constructor to invoke when given a type and a set of argument types. This PR fixes that by modelling (to the best of my abilities) the conversion rules and type matching of C++ to correctly map a list of arguments to a constructor.
We use a flow-based approach where we check if a sequence of steps can flow from a "source" (an argument type) to a "sink" (a constructor parameter type) using 0 or more steps (type conversions).
Unsurprisingly, C++ rules make this rather complicated. There are a few missing results still (related to how CV qualifiers are being treated), and spurious results (related to how overload resolution ranks conversions) but I'd prefer to leave those for as future work.
There are many commits since I worked tirelessly to ensure that each commit can be reviewed in isolation. Please thank me by reviewing it commit-by-commit! 😅