Testing if an expression has side effects at compile time

Richard Earnshaw (foss) Richard.Earnshaw@arm.com
Fri Jan 9 14:11:25 GMT 2026


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
> 



More information about the Gcc mailing list