Skip to content

std::str::SplitWhitespace does not implement Clone #41655

Closed
@phaylon

Description

@phaylon
Contributor

It seems currently impossible to iterate over a &str split by whitespace multiple times, due to Clone not being available in any solution.

Given the code

fn takes_iter<'i, I>(_: I) where I: Iterator<Item = &'i str> + Clone {}

fn main() {
    takes_iter("foo bar".split_whitespace());
}

I get the following error

rustc 1.19.0-nightly (afa1240e5 2017-04-29)
error[E0277]: the trait bound `std::str::SplitWhitespace<'_>: std::clone::Clone` is not satisfied
 --> <anon>:4:5
  |
4 |     takes_iter("foo bar".split_whitespace());
  |     ^^^^^^^^^^ the trait `std::clone::Clone` is not implemented for `std::str::SplitWhitespace<'_>`
  |
  = note: required by `takes_iter`

error: aborting due to previous error

Other workarounds ("foo bar".split(char::is_whitespace) and "foo bar".split(|c: char| c.is_whitespace()) also run into Clone issues.

Activity

added
T-libs-apiRelevant to the library API team, which will review and decide on the PR/issue.
on Apr 30, 2017
bluss

bluss commented on May 1, 2017

@bluss
Member

Something like "foo bar".split(&[' ', '\n'][..]) or "foo bar".split(char::is_whitespace as fn(_) -> bool) should work too, since the pattern is clonable. Unless there's an issue with that function pointer, hope not..

added a commit that references this issue on May 10, 2017

Auto merge of #41659 - bluss:clone-split-whitespace, r=aturon

58b33ad
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    T-libs-apiRelevant to the library API team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @phaylon@frewsxcv@bluss

        Issue actions

          std::str::SplitWhitespace does not implement Clone · Issue #41655 · rust-lang/rust