[Issue 21228] Templated toString silently ignored when it cant be instantiated
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Sep 5 22:18:18 UTC 2020
https://issues.dlang.org/show_bug.cgi?id=21228
Simen Kjaeraas <simen.kjaras at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |simen.kjaras at gmail.com
Summary|OutputRange-based toString |Templated toString silently
|is silently ignored if |ignored when it cant be
|isOutputRange is not |instantiated
|imported |
--- Comment #2 from Simen Kjaeraas <simen.kjaras at gmail.com> ---
All of the below cases are instances of this same issue:
struct S1 {
string toString()() {
nonExistent();
}
}
struct S2 {
void toString(R)(ref R r) if (isOutputRange!(R, char)) {}
}
struct S3 {
import std.range : isOutputRange;
void toString(R)(ref R r) if (isOutputRange!(R, char)) {
nonExistent();
}
}
unittest {
import std.conv : to;
assert(S1().to!string == "S1()");
assert(S2().to!string == "S2()");
assert(S3().to!string == "S3()");
}
formatValueImpl in std.format already tests for @disabled toString - it should
also test for instantiability.
--
More information about the Digitalmars-d-bugs
mailing list