3165. All starts_with() overloads should be called "begins_with"

Section: 27.4.3 [basic.string], 27.3.3 [string.view.template] Status: NAD Submitter: Gennaro Prota Opened: 2018-10-22 Last modified: 2020-08-21

Priority: 2

View other active issues in [basic.string].

View all other issues in [basic.string].

View all issues with NAD status.

Discussion:

Throughout the standard library, the opposite of the verb "to end" is "to begin", not to "to start". In this respect, all the overloads of std::basic_string::starts_with and std::basic_string_view::starts_with are named inconsistently. These calls were added in P0457R2, which refers to analogous functions in Java, Python, Qt, LLVM, WebKit, all of which use the term "start". But, in our opinion, the C++ standard library should first be consistent with itself.

[2018-11: Referred to LEWG after reflector discussion.]

[2020-05-28; LEWG issue reviewing]

LEWG issue processing voted to reject 3165 as NAD. Status change to Open.

Reject LWG3165 as NAD

SF F N A SA
21 1 0 1  0

[2020-08-21; Issue processing telecon: moved to NAD based on LEWG recommendation]

Proposed resolution:

This wording is relative to N4778.

  1. Change 27.4.3 [basic.string], class template basic_string synopsis, as indicated:

    bool beginstarts_with(basic_string_view<charT, traits> x) const noexcept;
    bool beginstarts_with(charT x) const noexcept;
    bool beginstarts_with(const charT* x) const;
    
  2. Change 27.4.3.8.5 [string.starts.with] as indicated

    bool beginstarts_with(basic_string_view<charT, traits> x) const noexcept;
    bool beginstarts_with(charT x) const noexcept;
    bool beginstarts_with(const charT* x) const;
    

    -1- Effects: Equivalent to:

    return basic_string_view<charT, traits>(data(), size()).beginstarts_with(x);
    
  3. Change 27.3.3 [string.view.template], class template basic_string_view synopsis, as indicated:

    constexpr bool beginstarts_with(basic_string_view x) const noexcept;
    constexpr bool beginstarts_with(charT x) const noexcept;
    constexpr bool beginstarts_with(const charT* x) const;
    
  4. Change 27.3.3.8 [string.view.ops] as indicated:

    constexpr bool beginstarts_with(basic_string_view x) const noexcept;
    

    -20- Effects: Equivalent to: return compare(0, npos, x) == 0;

    constexpr bool beginstarts_with(charT x) const noexcept;
    

    -21- Effects: Equivalent to: return beginstarts_with(basic_string_view(&x, 1));

    constexpr bool beginstarts_with(const charT* x) const;
    

    -22- Effects: Equivalent to: return beginstarts_with(basic_string_view(x));