Artur Skawina:

static assert(checkArgs!A(fmt), "Invalid or unsupported printf args");

A template constraint is better, I think.


You can't get any less overhead than this; not even when using a "well designed
statically compiled language".<

Maybe if you compile that with dmd and you look in the binary I think you will find some stuff related to that that's not needed.


void foo(int x)(string s) {}

A /run-time value known at compile-time/ is an oxymoron.

How would your above function to differ from this one
'void foo(alias x)(string s) {}' ?
Are you asking for 'void foo(alias int x)(string s) {}'?

That wasn't an important request, feel free to ignore it.

What I was trying to say is not impossible. The run-time semantics of this:

void foo(static int x)(string s) {}

Is meant to be the same as:

void foo(int x, string s) {}

The only difference is that the compiler requires x to be statically known (but then you can't use specialize code on the value of x, because that's really not a template function).

This is also allowed, and it's similar to what we were discussing about:

void foo(static int x)(string s) if (predicate(x)) {}

Bye,
bearophile

Reply via email to