Sujet : Re: C23 auto x C++ auto.
De : Bonita.Montero (at) *nospam* gmail.com (Bonita Montero)
Groupes : comp.lang.cDate : 26. May 2024, 16:22:28
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v2vgj3$3eh79$1@raubtier-asyl.eternal-september.org>
References : 1
User-Agent : Mozilla Thunderbird
Am 26.05.2024 um 15:49 schrieb Thiago Adams:
I think most people is not aware of this:
From 3096 C23 draft
"
6.7.9 Type inference
...
2 For such a declaration that is the definition of an object the init- declarator shall have the form
direct-declarator = assignment-expression
"
Basically "direct-declarator" differs from "declarator" because it does not contains pointer.
Then the type inference using auto and pointer is something undefined in C23.
struct node{
struct node * next;
};
int main(){
struct node node = {};
auto * p = node.next;
}
<source>:7:4: error: 'auto' requires a plain identifier, possibly with attributes, as declarator
7 | auto * p = node.next;
| ^~~~
This differs from C++.
I don't know what type inference in C is good for since the type names
in C are usually short. If I have short typenames in C++ I don't use
type inference. Type-inference makes sense to make such things shorter
typename map<string, string>::const_iterator it = map.cbegin();
This doesn't happen in C.