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