On Monday, 31 July 2017 at 15:46:47 UTC, inevzxui wrote:
On Monday, 31 July 2017 at 15:43:21 UTC, Martin Tschierschke
wrote:
As a rookie in D programming I try to understand the power of
templated functions with compile time parameters. With DMD
2.074 a compile time format
(auto output = format!("Print this %s")(var);)
was introduced, now we all know that very many of this format
strings are immutable, so wouldn't it be cool to automatically
detect this and use the compile time version?
Without the need to think about it and to use an other syntax?
Is this theoretically possible?
Regards mt.
That's what writeln() does. The format is detected for each
element of the variadic.
But the parameters are not checked at compile-time unless you
specifically pass the pattern string as a template parameter. I
think its immutability implicitly converting it into a template
parameter is what's what he's talking about.
import std.stdio;
void main(string[] args)
{
writefln!"%s"(); // compile-time assert
writefln("%s"); // runtime exception, though everything
needed for a compile-time assert was inferable during compilation
}