On 09/01/2026 13:47, Alejandro Colomar via Gcc wrote:
> Hi Florian,
> 
> On Fri, Jan 09, 2026 at 02:37:52PM +0100, Florian Weimer wrote:
>> * Alejandro Colomar via Gcc:
>>
>>> If there's no way, it would be interesting to add compound literals of
>>> function type to achieve this:
>>>
>>>     #define strnulD(...)                                          \
>>>     ((static inline auto                                          \
>>>       (auto s))                                                   \
>>>     {                                                             \
>>>             return s + strlen(s);                                 \
>>>     }(__VA_ARGS__))
>>
>> This already works:
>>
>> static inline auto
>> strnulD (auto s)
>> {
>>   return s + strlen (s);
>> }
> 
> Sorry; I forgot to mention I mean in C, not C++.
> 
> For a second, you got me illusioned and thought that might have been
> implemented in C.  :-)
> 
>       alx@devuan:~/tmp$ cat strnul.c 
>       #include <string.h>
> 
>       static inline auto
>       strnulD(auto s)
>       {
>               return s + strlen(s);
>       }
> 
>       int
>       main(void)
>       {
>               const char *p = strnulD("foo");
>       }
>       alx@devuan:~/tmp$ gcc strnul.c 
>       strnul.c:4:14: error: storage class specified for parameter ‘s’
>           4 | strnulD(auto s)
>             |              ^
>       strnul.c:3:1: error: ‘auto’ requires a plain identifier, possibly with 
> attributes, as declarator
>           3 | static inline auto
>             | ^~~~~~
>       strnul.c: In function ‘main’:
>       strnul.c:12:25: error: implicit declaration of function ‘strnulD’ 
> [-Wimplicit-function-declaration]
>          12 |         const char *p = strnulD("foo");
>             |                         ^~~~~~~
>       strnul.c:12:25: error: initialization of ‘const char *’ from ‘int’ 
> makes pointer from integer without a cast [-Wint-conversion]
> 
>> No need to invent new syntax for it.
> 
> Any chance we can get this in GNU C?
> 
> 

C23 has auto in C.

R.

> Have a lovely day!
> Alex
> 

Reply via email to