Sujet : Re: C23 auto x C++ auto.
De : thiago.adams (at) *nospam* gmail.com (Thiago Adams)
Groupes : comp.lang.cDate : 26. May 2024, 18:02:56
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v2vq00$3fq60$2@dont-email.me>
References : 1 2 3
User-Agent : Mozilla Thunderbird
Em 5/26/2024 12:03 PM, Thiago Adams escreveu:
Em 5/26/2024 11:23 AM, Michael S escreveu:
On Sun, 26 May 2024 10:49:30 -0300
Thiago Adams <thiago.adams@gmail.com> wrote:
>
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++.
>
>
>
Differs in positive way. Less confusing.
>
I agree!
clang still accepts it.
https://godbolt.org/z/nxhcWGo5h"For such a declaration that is the definition of an object the init-declarator shall have the form
direct-declarator = assignment-expression
..
177) Implementations need not accept a direct declarator that is not of the form
identifier attribute-specifier-sequence opt
optionally enclosed in balanced pairs of parentheses;
if a direct declarator of a different form is accepted, the behavior is implementation-defined.
"