compile-time checked format strings
kdevel
kdevel at vogtner.de
Sat Jan 13 19:15:49 UTC 2018
occasion:
http://forum.dlang.org/thread/mutegviphsjwqzqfouhs@forum.dlang.org?page=3#post-mailman.2136.1515709204.9493.digitalmars-d-announce:40puremagic.com
dmd checks the types but does not count the arguments.
ctcfs.d
```
import std.stdio;
import std.math;
void unit (T) ()
{
auto pi = 4 * atan (T (1));
writefln!"%30.24f" (pi, pi); // no error!
writefln!"%30.24f %30.24f" (pi, pi); // OK
// writefln!"%30.24d %30.24f" (pi, pi); // OK: "incompatible
format character
writefln!"%30.24f %30.24f %30.24f" (pi, pi); // no error
}
void main ()
{
unit!float;
}
```
$ dmd ctcfs.d
$ ./ctcfs
3.141592741012573242187500
3.141592741012573242187500 3.141592741012573242187500
3.141592741012573242187500 3.141592741012573242187500
std.format.FormatException@/.../dmd2/linux/bin64/../../src/phobos/std/format.d(479): Orphan format specifier: %f
----------------
/.../dmd2/linux/bin64/../../src/phobos/std/exception.d:615 pure
@safe bool
std.exception.enforceEx!(std.format.FormatException).enforceEx!(bool).enforceEx(bool, lazy immutable(char)[], immutable(char)[], ulong) [0x44503c]
/.../dmd2/linux/bin64/../../src/phobos/std/format.d:479 @safe
uint std.format.formattedWrite!(std.stdio.File.LockingTextWriter,
char, float, float).formattedWrite(ref
std.stdio.File.LockingTextWriter, const(char[]), float, float)
[0x44c436]
/.../dmd2/linux/bin64/../../src/phobos/std/stdio.d:1496 @safe
void std.stdio.File.writefln!(char, float,
float).writefln(const(char[]), float, float) [0x44c340]
/.../dmd2/linux/bin64/../../src/phobos/std/stdio.d:3797 @safe
void std.stdio.writefln!(char, float,
float).writefln(const(char[]), float, float) [0x44c2b7]
/.../dmd2/linux/bin64/../../src/phobos/std/stdio.d:3791 @safe
void std.stdio.writefln!("%30.24f %30.24f %30.24f", float,
float).writefln(float, float) [0x44da27]
ctcfs.d:10 @safe void ctcfs.unit!(float).unit() [0x443673]
ctcfs.d:15 _Dmain [0x443614]
More information about the Digitalmars-d-learn
mailing list