Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

std.conv.to of lazy range to numbers array #9607

Open
dlangBugzillaToGithub opened this issue Jun 18, 2013 · 2 comments
Open

std.conv.to of lazy range to numbers array #9607

dlangBugzillaToGithub opened this issue Jun 18, 2013 · 2 comments

Comments

@dlangBugzillaToGithub
Copy link

bearophile_hugs reported this on 2013-06-18T10:47:23Z

Transfered from https://issues.dlang.org/show_bug.cgi?id=10407

CC List

  • hsteoh

Description

import std.regex: splitter, regex;
import std.conv: to;
import std.array: array;
void main() {
    auto s = splitter("10 30 20", r"[\s,]+".regex);
    auto r1 = s.array.to!(real[]); // OK
    auto r2 = s.to!(real[]); // Error
}


DMD 2.063.2 gives:

...\dmd2\src\phobos\std\conv.d(276): Error: template std.conv.toImpl does not match any function template declaration. Candidates are:
...\dmd2\src\phobos\std\conv.d(332):        std.conv.toImpl(T, S)(S value) if (isImplicitlyConvertible!(S, T) && !isEnumStrToStr!(S, T) && !isNullToStr!(S, T))
...\dmd2\src\phobos\std\conv.d(445):        std.conv.toImpl(T, S)(ref S s) if (isRawStaticArray!S)
...\dmd2\src\phobos\std\conv.d(461):        std.conv.toImpl(T, S)(S value) if (is(typeof(S.init.opCast!T()) : T) && !isExactSomeString!T)
...\dmd2\src\phobos\std\conv.d(492):        std.conv.toImpl(T, S)(S value) if (!isImplicitlyConvertible!(S, T) && is(T == struct) && is(typeof(T(value))))
...\dmd2\src\phobos\std\conv.d(542):        std.conv.toImpl(T, S)(S value) if (!isImplicitlyConvertible!(S, T) && is(T == class) && is(typeof(new T(value))))
...\dmd2\src\phobos\std\conv.d(276):        ... (16 more, -v to show) ...
...\dmd2\src\phobos\std\conv.d(332): Error: template std.conv.toImpl cannot deduce template function from argument types !(real[])(Splitter!(string, Regex!char))
...\dmd2\src\phobos\std\conv.d(276): Error: template instance toImpl!(real[]) errors instantiating template
test.d(7): Error: template instance std.conv.to!(real[]).to!(Splitter!(string, Regex!char)) error instantiating
@dlangBugzillaToGithub
Copy link
Author

hsteoh commented on 2015-09-08T17:11:58Z

Is this a real bug? Couldn't you just do `s.map!(a => a.to!real).array` to do what you want?

@dlangBugzillaToGithub
Copy link
Author

bearophile_hugs commented on 2015-09-18T08:55:47Z

(In reply to hsteoh from comment #1)
> Is this a real bug?

No, it's an enhancement request...


> Couldn't you just do `s.map!(a => a.to!real).array` to do what you want?

Yes, but I think converting lazy ranges is a basic and common need, so it should be supported by "to".

@thewilsonator thewilsonator removed OS:Windows Issues Specific to Windows Arch:x86 Issues specific to x86 P4 labels Dec 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants