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?
Have a lovely day!
Alex
--
<https://www.alejandro-colomar.es>
signature.asc
Description: PGP signature
