Thread overview | ||||||
---|---|---|---|---|---|---|
|
July 08, 2013 [Issue 10571] New: formattedWrite error with delegate and string | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=10571 Summary: formattedWrite error with delegate and string Product: D Version: D2 Platform: All OS/Version: All Status: NEW Keywords: rejects-valid Severity: normal Priority: P2 Component: Phobos AssignedTo: nobody@puremagic.com ReportedBy: yebblies@gmail.com --- Comment #0 from yebblies <yebblies@gmail.com> 2013-07-08 21:53:05 EST --- I can't format a string into a delegate taking a 'const char[]'. This seems wrong to me. ---------------------------------- import std.format; void main() { string buf; formattedWrite((in char[] s) { buf ~= s; }, "%s", "hello"); assert(buf == "hello"); } ---------------------------------- DMD v2.064 DEBUG F:\documents\desktop\d\sourcecode\phobos\std\range.d(611): Error: static assert "Cannot put a dchar into a void delegate(const(char[])) nothrow @safe" F:\documents\desktop\d\sourcecode\phobos\std\format.d(1752): instantiated from here: put!(void delegate(const(char[])) nothrow @safe, dchar) F:\documents\desktop\d\sourcecode\phobos\std\format.d(2146): instantiated from here: formatValue!(void delegate(const(char[])) nothrow @safe, dchar, char) F:\documents\desktop\d\sourcecode\phobos\std\format.d(1790): instantiated from here: formatRange!(void delegate(const(char[])) nothrow @safe, string, char) F:\documents\desktop\d\sourcecode\phobos\std\format.d(2996): ... (1 instantiations, -v to show) ... F:\documents\desktop\d\sourcecode\phobos\std\format.d(420): instantiatedfrom here: formatGeneric!(void delegate(const(char[])) nothrow @safe, string, char) testx.d(7): instantiated from here: formattedWrite!(void delegate(const(char[]) s) nothrow @safe, char, string) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
July 28, 2013 [Issue 10571] formattedWrite error with delegate and string | ||||
---|---|---|---|---|
| ||||
Posted in reply to yebblies | http://d.puremagic.com/issues/show_bug.cgi?id=10571 yebblies <yebblies@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |DUPLICATE --- Comment #1 from yebblies <yebblies@gmail.com> 2013-07-28 15:33:23 EST --- *** This issue has been marked as a duplicate of issue 9823 *** -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
July 28, 2013 [Issue 10571] formattedWrite error with delegate and string | ||||
---|---|---|---|---|
| ||||
Posted in reply to yebblies | http://d.puremagic.com/issues/show_bug.cgi?id=10571 yebblies <yebblies@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED Resolution|DUPLICATE | --- Comment #2 from yebblies <yebblies@gmail.com> 2013-07-28 15:41:08 EST --- Ok, maybe not. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
August 29, 2013 [Issue 10571] formattedWrite error with delegate and string | ||||
---|---|---|---|---|
| ||||
Posted in reply to yebblies | http://d.puremagic.com/issues/show_bug.cgi?id=10571 monarchdodra@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |monarchdodra@gmail.com --- Comment #3 from monarchdodra@gmail.com 2013-08-29 10:27:33 PDT --- (In reply to comment #0) > I can't format a string into a delegate taking a 'const char[]'. This seems wrong to me. > > ---------------------------------- > > import std.format; > > void main() > { > string buf; > formattedWrite((in char[] s) { buf ~= s; }, "%s", "hello"); > assert(buf == "hello"); > } > > ---------------------------------- Yup. The branches char/string don't work with a delegate sink that accepts a const(char)[]. Here is a somewhat reduced case. //---- import std.format; void main() { FormatSpec!char f; formatValue((const(char)[]){}, '本', f); formatValue((const(char)[]){}, "a", f); } //---- The root issue is that "formatValue" for wide characters doesn't actually work. It just calls "put" and hopes put will magically do the work :D formatValue for strings then also fails, because it has to compile the "%r" path (raw), which iterates over the string as a range (dchars), and then prints these raw with formatValue(dchar), which, again, doesn't work. The reason we haven't seen this failure in the testers yet, is that std.format is mostly unittest using Appender, and Appender *knows* how to transcode, making it a very poor choice for thorough testing. In any case, this gets fixed by my "put" fix: https://github.com/D-Programming-Language/phobos/pull/1439 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation