https://gcc.gnu.org/g:597ca24445462f11aaa3f7164a81f2f4f74bb80a

commit r15-7992-g597ca24445462f11aaa3f7164a81f2f4f74bb80a
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Wed Mar 12 11:30:04 2025 +0000

    libstdc++: Add lambda example to case transformation docs
    
    libstdc++-v3/ChangeLog:
    
            * doc/xml/manual/strings.xml: Tweak formatting. Add example
            using lambda.
            * doc/html/manual/strings.html: Regenerate.

Diff:
---
 libstdc++-v3/doc/html/manual/strings.html | 19 ++++++++++++++-----
 libstdc++-v3/doc/xml/manual/strings.xml   | 19 +++++++++++++++----
 2 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/libstdc++-v3/doc/html/manual/strings.html 
b/libstdc++-v3/doc/html/manual/strings.html
index 34a34dfa980c..5344d0e89238 100644
--- a/libstdc++-v3/doc/html/manual/strings.html
+++ b/libstdc++-v3/doc/html/manual/strings.html
@@ -50,10 +50,12 @@
    </pre><p>
      <span class="emphasis"><em>Note</em></span> that these calls all
       involve the global C locale through the use of the C functions
-      <code class="code">toupper/tolower</code>.  This is absolutely 
guaranteed to work --
-      but <span class="emphasis"><em>only</em></span> if the string contains 
<span class="emphasis"><em>only</em></span> characters
-      from the basic source character set, and there are <span 
class="emphasis"><em>only</em></span>
-      96 of those.  Which means that not even all English text can be
+      <code class="code">toupper</code>/<code class="code">tolower</code>.
+      This is absolutely guaranteed to work
+      -- but <span class="emphasis"><em>only</em></span> if the string contains
+      <span class="emphasis"><em>only</em></span> characters from the basic 
source character set,
+      and there are <span class="emphasis"><em>only</em></span> 96 of those.
+      Which means that not even all English text can be
       represented (certain British spellings, proper names, and so forth).
       So, if all your input forevermore consists of only those 96
       characters (hahahahahaha), then you're done.
@@ -73,7 +75,14 @@
       // std::tolower(c) is undefined if c &lt; 0 so cast to unsigned char.
       return std::tolower((unsigned char)c);
    } </pre><p>(Thanks to James Kanze for assistance and suggestions on all of 
this.)
-   </p><p>Another common operation is trimming off excess whitespace.  Much
+   </p><p>
+     Since C++11 the wrapper can be replaced with a lambda expression,
+     which can perform the conversion to <code class="code">unsigned 
char</code> and
+     also ensure the single-argument form of <code 
class="code">std::lower</code> is used:
+   </p><pre class="programlisting">
+     std::transform (s.begin(), s.end(), capital_s.begin(),
+                     [](unsigned char c) { return std::tolower(c); });
+   </pre><p>Another common operation is trimming off excess whitespace.  Much
       like transformations, this task is trivial with the use of string's
       <code class="code">find</code> family.  These examples are broken into 
multiple
       statements for readability:
diff --git a/libstdc++-v3/doc/xml/manual/strings.xml 
b/libstdc++-v3/doc/xml/manual/strings.xml
index 4a63dd964771..58a78d01d239 100644
--- a/libstdc++-v3/doc/xml/manual/strings.xml
+++ b/libstdc++-v3/doc/xml/manual/strings.xml
@@ -66,10 +66,12 @@
    <para>
      <emphasis>Note</emphasis> that these calls all
       involve the global C locale through the use of the C functions
-      <code>toupper/tolower</code>.  This is absolutely guaranteed to work --
-      but <emphasis>only</emphasis> if the string contains 
<emphasis>only</emphasis> characters
-      from the basic source character set, and there are 
<emphasis>only</emphasis>
-      96 of those.  Which means that not even all English text can be
+      <code>toupper</code>/<code>tolower</code>.
+      This is absolutely guaranteed to work
+      -- but <emphasis>only</emphasis> if the string contains
+      <emphasis>only</emphasis> characters from the basic source character set,
+      and there are <emphasis>only</emphasis> 96 of those.
+      Which means that not even all English text can be
       represented (certain British spellings, proper names, and so forth).
       So, if all your input forevermore consists of only those 96
       characters (hahahahahaha), then you're done.
@@ -93,6 +95,15 @@
    } </programlisting>
    <para>(Thanks to James Kanze for assistance and suggestions on all of this.)
    </para>
+   <para>
+     Since C++11 the wrapper can be replaced with a lambda expression,
+     which can perform the conversion to <code>unsigned char</code> and
+     also ensure the single-argument form of <code>std::lower</code> is used:
+   </para>
+   <programlisting>
+     std::transform (s.begin(), s.end(), capital_s.begin(),
+                     [](unsigned char c) { return std::tolower(c); });
+   </programlisting>
    <para>Another common operation is trimming off excess whitespace.  Much
       like transformations, this task is trivial with the use of string's
       <code>find</code> family.  These examples are broken into multiple

Reply via email to