A constraint on the deduced auto
type doesn’t mean it needs to be a specific type, it means it needs to be one of a set of types that satisfy the constraint. Note that a constraint and a type are not the same thing, and they’re not interchangeable.
e.g. a concept like std::integral constrains the deduced type to be an integral type, such as int
or long
, but not float
, or std::string
.
If I really need a
std::integral
datatype, couldn’t I just omit theauto
completely?
In principle, I suppose you could, but this would at the minimum lead to parsing difficulties. e.g. in a declaration like
foo f = // ...
is foo
a type, or a constraint on the type?
Whereas in the current syntax, we have
foo auto f = // ...
and there’s no doubt that foo
is a constraint on the type of f
.