A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://cplusplus.github.io/LWG/issue2235 below:

Undefined behavior without proper requirements on basic_string constructors

This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++14 status.

2235. Undefined behavior without proper requirements on basic_string constructors

Section: 27.4.3.3 [string.cons] Status: C++14 Submitter: Juan Soulie Opened: 2013-01-17 Last modified: 2016-01-28

Priority: Not Prioritized

View all other issues in [string.cons].

View all issues with C++14 status.

Discussion:

In 27.4.3.3 [string.cons], I believe tighter requirements should be imposed on basic_string's constructors taking an s argument (or, a behavior should be provided for the undefined cases). These requirements are properly stated in the other members functions taking s arguments (append, assign, insert,...).

basic_string(const charT* s, size_type n, const Allocator& a = Allocator());

Relative to N3485, 27.4.3.3 [string.cons]/6 says "Requires: s shall not be a null pointer and n < npos", where it should say: "Requires: s points to an array of at least n elements of charT"

basic_string(const charT* s, const Allocator& a = Allocator());

27.4.3.3 [string.cons]/8 says "Requires: s shall not be a null pointer.", where it should say: "Requires: s points to an array of at least traits::length(s) + 1 elements of charT"

Daniel:

I think that 16.4.5.9 [res.on.arguments] p1 b2 basically requires this already, but the wording is indeed worth improving it.

[2013-03-15 Issues Teleconference]

Moved to Review.

The resolution could be worded more cleanly, and there is some concern about redundancy between Requirements and Effects clauses. Consensus that we do want to say something like this for the Requirements though.

[2013-04-18, Bristol]

Move to Ready

[2013-09-29, Bristol]

Apply to the Working Paper

Proposed resolution:

This wording is relative to N3485.

  1. Change 27.4.3.3 [string.cons]/6 as indicated:

    basic_string(const charT* s, size_type n, const Allocator& a = Allocator());
    

    -6- Requires: s shall not be a null pointer and n < npos points to an array of at least n elements of charT.

  2. Change 27.4.3.3 [string.cons]/8 as indicated:

    basic_string(const charT* s, const Allocator& a = Allocator());
    

    -8- Requires: s shall not be a null pointer points to an array of at least traits::length(s) + 1 elements of charT.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4