Can we check the arguments to format() at compile time?

Alex Parrill via Digitalmars-d digitalmars-d at puremagic.com
Fri Apr 1 16:26:14 PDT 2016


On Friday, 1 April 2016 at 21:25:46 UTC, Yuxuan Shui wrote:
> Clang has this nice feature that it will warn you when you 
> passed wrong arguments to printf:
>
> #include <stdio.h>
> int main(){
> 	long long u = 10;
> 	printf("%c", u);
> }
>
> clang something.c:
> something.c:4:15: warning: format specifies type 'int' but the 
> argument has type 'long long' [-Wformat]
>
> With the CTFE power of D, we should be able to do the same 
> thing when the format string is available at compile time. 
> Instead of throwing exceptions at run time.

Not as-is, because the format string is a runtime argument and 
not a compile-time constant.

Consider:

     writefln(rand() >= 0.5 ? "%s" : "%d", 123);

It's certainly possible with a new, templated writef function. 
Hypothetically:

     writefln_ctfe!"%s"(1234); // would fail


More information about the Digitalmars-d mailing list