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
>