https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88084

            Bug ID: 88084
           Summary: basic_string_view::copy doesn't use Traits::copy
           Product: gcc
           Version: 8.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: n.eugene536 at gmail dot com
  Target Milestone: ---

Target: x86_64-linux-gnu
gcc version 8.2.0 (Ubuntu 8.2.0-1ubuntu2~18.04)

Case: g++ a.cpp -std=c++17

struct my_trait : std::char_traits<char>
{
    static char* copy(char* dest, const char* src, std::size_t count) {
        std::transform(src, src + count, dest, 
          [](char c) { return std::tolower(c); }
        );

        return dest;
    }
};

int main() {
    std::basic_string_view<char, my_trait> s2("AB");
    char buf[3]{};
    s2.copy(buf, 3);

    std::cout << buf << std::endl;
}

The output is: AB
but expected: ab

In Standard: basic_string_view::copy has to be equivalent to traits::copy

Reply via email to