digitalmars.D - Compiler bug?
- IM (20/20) Dec 28 2017 The following code:
- Daniel Kozak (6/26) Dec 28 2017 No it is not a bug, because
- Daniel Kozak (3/40) Dec 28 2017 But maybe you can propose cjange from ref R r to auto ref R r
- IM (5/16) Dec 29 2017 If this will make it work with both lvalues and rvalues, then
- Daniel Kozak (2/20) Dec 29 2017 https://github.com/dlang/phobos/pull/5971
The following code: int guess; readln().formattedRead!"%d"(guess); produces the following compiler error: Error: template std.format.formattedRead cannot deduce function from argument types !("%s")(string, int), candidates are: /usr/include/dmd/phobos/std/format.d(635): std.format.formattedRead(alias fmt, R, S...)(ref R r, auto ref S args) if (isSomeString!(typeof(fmt))) /usr/include/dmd/phobos/std/format.d(644): std.format.formattedRead(R, Char, S...)(ref R r, const(Char)[] fmt, auto ref S args) That is odd! I expected this to match: uint formattedRead(alias fmt, R, S...)(ref R r, auto ref S args) However, the following works!!! int guess; string line = readln(); line.formattedRead!"%d"(guess); This definitely looks like a bug, but I want to confirm first before filing one.
Dec 28 2017
No it is not a bug, because uint formattedRead(alias fmt, R, S...)(ref R r, auto ref S args) could not match (there is a ref R r) so in your first example you dont have lvalue but rvalue On Fri, Dec 29, 2017 at 8:30 AM, IM via Digitalmars-d < digitalmars-d puremagic.com> wrote:The following code: int guess; readln().formattedRead!"%d"(guess); produces the following compiler error: Error: template std.format.formattedRead cannot deduce function from argument types !("%s")(string, int), candidates are: /usr/include/dmd/phobos/std/format.d(635): std.format.formattedRead(alias fmt, R, S...)(ref R r, auto ref S args) if (isSomeString!(typeof(fmt))) /usr/include/dmd/phobos/std/format.d(644): std.format.formattedRead(R, Char, S...)(ref R r, const(Char)[] fmt, auto ref S args) That is odd! I expected this to match: uint formattedRead(alias fmt, R, S...)(ref R r, auto ref S args) However, the following works!!! int guess; string line = readln(); line.formattedRead!"%d"(guess); This definitely looks like a bug, but I want to confirm first before filing one.
Dec 28 2017
But maybe you can propose cjange from ref R r to auto ref R r https://dlang.org/spec/template.html#auto-ref-parameters On Fri, Dec 29, 2017 at 8:50 AM, Daniel Kozak <kozzi11 gmail.com> wrote:No it is not a bug, because uint formattedRead(alias fmt, R, S...)(ref R r, auto ref S args) could not match (there is a ref R r) so in your first example you dont have lvalue but rvalue On Fri, Dec 29, 2017 at 8:30 AM, IM via Digitalmars-d < digitalmars-d puremagic.com> wrote:The following code: int guess; readln().formattedRead!"%d"(guess); produces the following compiler error: Error: template std.format.formattedRead cannot deduce function from argument types !("%s")(string, int), candidates are: /usr/include/dmd/phobos/std/format.d(635): std.format.formattedRead(alias fmt, R, S...)(ref R r, auto ref S args) if (isSomeString!(typeof(fmt))) /usr/include/dmd/phobos/std/format.d(644): std.format.formattedRead(R, Char, S...)(ref R r, const(Char)[] fmt, auto ref S args) That is odd! I expected this to match: uint formattedRead(alias fmt, R, S...)(ref R r, auto ref S args) However, the following works!!! int guess; string line = readln(); line.formattedRead!"%d"(guess); This definitely looks like a bug, but I want to confirm first before filing one.
Dec 28 2017
On Friday, 29 December 2017 at 07:55:08 UTC, Daniel Kozak wrote:But maybe you can propose cjange from ref R r to auto ref R rIf this will make it work with both lvalues and rvalues, then yes, this would be a nice fix. No need to force users to cache string line = readln(); first and then use it with formattedRead().https://dlang.org/spec/template.html#auto-ref-parameters On Fri, Dec 29, 2017 at 8:50 AM, Daniel Kozak <kozzi11 gmail.com> wrote:No it is not a bug, because uint formattedRead(alias fmt, R, S...)(ref R r, auto ref S args) could not match (there is a ref R r) so in your first example you dont have lvalue but rvalue
Dec 29 2017
On Friday, 29 December 2017 at 08:02:36 UTC, IM wrote:On Friday, 29 December 2017 at 07:55:08 UTC, Daniel Kozak wrote:https://github.com/dlang/phobos/pull/5971But maybe you can propose cjange from ref R r to auto ref R rIf this will make it work with both lvalues and rvalues, then yes, this would be a nice fix. No need to force users to cache string line = readln(); first and then use it with formattedRead().https://dlang.org/spec/template.html#auto-ref-parameters On Fri, Dec 29, 2017 at 8:50 AM, Daniel Kozak <kozzi11 gmail.com> wrote:No it is not a bug, because uint formattedRead(alias fmt, R, S...)(ref R r, auto ref S args) could not match (there is a ref R r) so in your first example you dont have lvalue but rvalue
Dec 29 2017