On 2/04/2016 8:25 AM, 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.
That's something I want to do with this eventually:
https://github.com/D-Programming-Language/dmd/pull/3799
When arguments (or anything about the arguments) is known at compile
time, some subsets of in-contracts can be checked.
Currently only stuff like this is supported:
auto iota(int low, int high) in { assert(low <= high); } body { ... }
iota(23, 7); // Error
But it's not impossible that
assert(checkFormatArgs(format, args));
could work one day.