As seen in [dcl.spec.auto], when you use a placeholder here, the constraint needs to immediately precede the auto
:
placeholder-type-specifier:
type-constraint_opt auto
type-constraint_opt decltype ( auto )
This is simply a matter of syntax. The constraint isn't a general specifier like const
is; it doesn't have a flexible position. Conceptually, you can think of Octet auto
as one "word" representing the constrained type.
As for f5
, this is not allowed as a parameter per p2:
A placeholder-type-specifier of the form "type-constraint_opt
auto
" can be used as a decl-specifier of the decl-specifier-seq of a parameter-declaration of a function declaration...
No such text exists for decltype(auto)
. In addition, per p6:
A program that uses a placeholder type in a context not explicitly allowed in this subclause is ill-formed.
Logically, I'm not sure how I'd specify decltype(auto)
to work in this context. Sure, it could be specified, but I don't think there's precedent in the language for it, so it would need to be motivated over an alternative that already has the desired effect.
Octet auto
represents the type. You can have right const or left const, but not "middle-const". – Euxenitef5
not work? @DrewDormann – Nitpickingf5
is not valid C++ syntax. It has no meaning. You could perhaps look at this question to see the contexts wheredecltype(auto)
has meaning in C++. Or perhaps you could edit the question to describe what you think that parameter would mean. – Euxenite