Title
{can_}substitute specification is ill-formed
Status
new
Section
[meta.reflection.substitute]
Submitter
Matthias Wippich

Created on 2025-08-15.00:00:00 last changed 2 weeks ago

Messages

Date: 2025-08-15.00:00:00

`can_substitute` and `substitute` are currently specified in terms of splices in a template argument list:

[meta.reflection.substitute] p3:

Returns: `true` if Z<[:Args:]...> is a valid template-id ([temp.names]) that does not name a function whose type contains an undeduced placeholder type. Otherwise, `false`.

[meta.reflection.substitute] p7:

Returns: ^^Z<[:Args:]...>.

This wording was introduced in P2996R11. However, merging in changes from P3687 "Final Adjustments to C++26 Reflection" in P2996R13 changed the rules for splices in this context. This makes `can_substitute` and `substitute` as specified currently ill-formed. We cannot use the given syntax to splice an arbitrary choice of values, types and templates anymore.

While the intent seems clear, this should be rephrased to be more technically correct.

History
Date User Action Args
2025-08-15 00:00:00admincreate