Skip to content

c++23 std::ranges::copy_n advances InputIterator one more time than necessary #129747

Open
@Be3y4uu-K0T

Description

@Be3y4uu-K0T

Repeated error, but for copy_n from ranges. (old resolved bug)

Test program (godbolt):

#include <iostream>
#include <sstream>
#include <vector>
#include <iterator>

int main()
{
    std::istringstream s("1 2 3 4 5");
    std::vector<int> v;
    std::ranges::copy_n(std::istream_iterator<int>(s), 2, std::back_inserter(v));
    std::ranges::copy_n(std::istream_iterator<int>(s), 2, back_inserter(v));

    std::ranges::copy(v, std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
}

Run:
clang++ -std=c++23 index.cc -o index && ./index

Actual output:
1 2 4 5

Expected output:
1 2 3 4

Environment:

% clang++ -v
Homebrew clang version 18.1.8
Target: arm64-apple-darwin24.3.0
Thread model: posix
InstalledDir: /opt/homebrew/bin

Metadata

Metadata

Assignees

No one assigned

    Labels

    libc++libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.rangesIssues related to `<ranges>`

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions