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
[expr.prim.req]/1 Incorrect reference to [temp.constr.decl]? #2944
Comments
Referring to [temp.constr.constr] seems to be most appropriate. |
I re-read the version of "constraints.tex" from when Richard Smith's commit was made (https://github.com/cplusplus/concepts-ts/blob/52b22de6edac608b72244fe1fdee4188a9c40f11/src/constraints.tex). I saw that back then the [temp.constr.decl] section contained the following paragraph:
This may be the reason why [temp.constr.decl] was referenced (in both sentences of [expr.prim.req]/1). And this may be relevant, as I think that the standard, in its current version, does not state when a constraint-expression is satisfied. It only states when a constraint is satisfied, but a constraint-expression first needs to be normalized in order to become a constraint. |
Well, it's certainly odd to have two cross-references to the same target within the same paragraph. |
This has been on my mind for a while. I keep trying to figure out why the references would be to [temp.constr.decl] at the time the commit was made. The explanation that I can come up with is that [temp.constr.decl] was the section that made the link between constraint-expressions and constraints. This is because:
I think other sections were concerned only with constraints. @zygoloid, could you please confirm that this is the reasoning behind the initial references? Thank you very much! |
[expr.prim.req]/1
I tracked the highlighted sentence to this commit (cplusplus/concepts-ts@52b22de).
Does the highlighted sentence mean that in the case of a requires expression such as:
requires { requires A<T>::val && B<T>::val; };
if
A<T>::val
evaluates tofalse
then the template argument that corresponds toT
is not substituted intoB<T>
(this would be helpful ifB<T>::val
would make the program ill-formed)? If so, then why is the reference to [temp.constr.decl]? I checked the contents of [temp.constr.decl] back when the commit was made, but I still cannot find a reason for the reference to be to that section.I think a more appropriate reference could be to [temp.constr.op], which states that some constraints may remain unchecked.
Thank you.
The text was updated successfully, but these errors were encountered: