<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <channel>
    
    <title><![CDATA[Standard C++ | News]]></title>
    <link>http://isocpp.org/blog</link>
    <description></description>
    <dc:language>en</dc:language>
    <dc:rights>Copyright 2026</dc:rights>
    <admin:generatorAgent rdf:resource="https://expressionengine.com/" />
    

    <item>
      <title>CppCon 2025 Cache Me Maybe: The Performance Secret Every C++ Developer Needs &#45;&#45; Michelle D&apos;Souza</title>
      <link>https://isocpp.org//blog/2026/04/cppcon-2025-cache-me-maybe-the-performance-secret-every-cpp-developer-needs</link>
      <guid>https://isocpp.org//blog/2026/04/cppcon-2025-cache-me-maybe-the-performance-secret-every-cpp-developer-needs</guid>
      <description><![CDATA[<p>
	<img alt="Cache_Me_Maybe_dsouza.png" src="https://isocpp.org/files/img/Cache_Me_Maybe_dsouza.png" style="width: 400px; margin: 10px; float: right;" />Registration is now open for CppCon 2026!&nbsp;The conference starts on September 12 and will be held&nbsp;<a href="https://cppcon.org/">in person in Aurora, CO</a>. To whet your appetite for this year&rsquo;s conference, we&rsquo;re posting videos of some of the top-rated talks from last year&#39;s conference. Here&rsquo;s another CppCon talk video we hope you will enjoy &ndash; and why not&nbsp;<a href="https://cppcon.org/registration/"><strong>register today</strong></a><strong>&nbsp;for CppCon 2026!</strong></p>
<blockquote>
	<h3>
		<a href="https://www.youtube.com/watch?v=VhKq0nzPTh0">Cache Me Maybe: The Performance Secret Every C++ Developer Needs</a></h3>
	<p>
		by Michelle D&#39;Souza</p>
</blockquote>
<p>
	Summary of the talk:</p>
<blockquote>
	<p>
		Calling all code detectives! Grab your trench coats and magnifying glasses ... it&#39;s time to crack the case of sluggish C++ performance. In this thrilling investigation, we&#39;ll uncover the hidden world of your computer&#39;s built-in cache and how to harness it to turbocharge your code.<br />
		<br />
		We&#39;ll comb through the fundamentals of caches like seasoned sleuths, uncover clues on optimizing access patterns, and interrogate suspects like false sharing and cache unfriendly data structures. We will also examine benchmark evidence based on real-world production code, exposing how each technique delivers the goods.<br />
		<br />
		By the end of this mission, you&#39;ll be armed with a detective&#39;s toolkit of cache savvy strategies, ready to solve cross-platform performance mysteries and bring blazing fast code to justice. Cache you at this session, maybe!</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Video & On-Demand,]]></dc:subject>
      <pubDate>Fri, 03 Apr 2026 17:15:42 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>std::vector — Four Mechanisms Behind Every push_back() &#45;&#45; Gracjan Olbinski</title>
      <link>https://isocpp.org//blog/2026/04/stdvector-four-mechanisms-behind-every-push_back-gracjan-olbinski</link>
      <guid>https://isocpp.org//blog/2026/04/stdvector-four-mechanisms-behind-every-push_back-gracjan-olbinski</guid>
      <description><![CDATA[<p>
	A walkthrough of four mechanisms working behind every push_back() call &mdash; exponential growth and amortized O(1), the growth factor&#39;s effect on memory reuse, cache performance from contiguity, and the silent noexcept trap in move semantics during reallocation.</p>
<blockquote>
	<h3>
		<a href="https://golbinski.org/blog/std-vector-push-back/">std::vector &mdash; Four Mechanisms Behind Every push_back()</a></h3>
	<p>
		by&nbsp;Gracjan Olbinski</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		"You call push_back() a thousand times. The vector reallocates about ten. Behind that simple interface, four mechanisms are working together &mdash; each one invisible during normal use, each one shaping your performance in ways that push_back() will never tell you about."</p>
</blockquote>
<p>
	&nbsp;</p>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Thu, 02 Apr 2026 23:48:28 +0000</pubDate>
      <dc:creator>Gracjan Olbinski</dc:creator>
    </item>

    <item>
      <title>CppCon 25 Matrix Multiplication Deep Dive || Cache Blocking, SIMD &amp;amp; Parallelization &#45;&#45; Aliaksei Sala</title>
      <link>https://isocpp.org//blog/2026/03/cppcon-25-matrix-multiplication-deep-dive-cache-blocking-simd-parallelizati</link>
      <guid>https://isocpp.org//blog/2026/03/cppcon-25-matrix-multiplication-deep-dive-cache-blocking-simd-parallelizati</guid>
      <description><![CDATA[<p>
	<img alt="matrix_multiplication_Aliaksei_Sala.png" src="https://isocpp.org/files/img/matrix_multiplication_Aliaksei_Sala.png" style="width: 400px; margin: 10px; float: right;" />Registration is now open for CppCon 2026!&nbsp;The conference starts on September 12 and will be held&nbsp;<a href="https://cppcon.org/">in person in Aurora, CO</a>. To whet your appetite for this year&rsquo;s conference, we&rsquo;re posting videos of some of the top-rated talks from last year&#39;s conference. Here&rsquo;s another CppCon talk video we hope you will enjoy &ndash; and why not&nbsp;<a href="https://cppcon.org/registration/"><strong>register today</strong></a><strong>&nbsp;for CppCon 2026!</strong></p>
<blockquote>
	<h3>
		<a href="https://www.youtube.com/watch?v=GHctcSBd6Z4">Matrix Multiplication Deep Dive || Cache Blocking, SIMD &amp; Parallelization</a></h3>
	<p>
		by Aliaksei Sala</p>
</blockquote>
<p>
	Summary of the talk:</p>
<blockquote>
	<p>
		Matrix multiplication is a fundamental operation in scientific computing, game development, AI, and numerous high-performance applications. While its mathematical definition is simple, achieving optimal performance in C++ is far from trivial.<br />
		<br />
		In this talk, we will explore different optimization techniques for matrix multiplication, from naive implementations to highly tuned versions leveraging modern hardware features. We will cover key performance-enhancing strategies such as loop unrolling, cache blocking, SIMD vectorization, parallelization using threads and more. Through benchmarking and profiling, we will measure the real impact of these optimizations.<br />
		<br />
		By the end of this session, attendees will gain insights into two critical questions:<br />
		<br />
		How hard is it to implement an optimized matrix multiplication in C++? How effective is C++ for achieving peak performance in this task?<br />
		<br />
		This talk is suitable for developers interested in performance optimization, computational efficiency, and modern C++ techniques for numerical computing.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Video & On-Demand,]]></dc:subject>
      <pubDate>Tue, 31 Mar 2026 17:11:56 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>The hidden compile&#45;time cost of C++26 reflection &#45;&#45; Vittorio Romeo</title>
      <link>https://isocpp.org//blog/2026/03/the-hidden-compile-time-cost-of-cpp26-reflection-vittorio-romeo</link>
      <guid>https://isocpp.org//blog/2026/03/the-hidden-compile-time-cost-of-cpp26-reflection-vittorio-romeo</guid>
      <description><![CDATA[<p>
	How much does C++26 Reflection actually cost your build?</p>
<p>
	In this article, we&#39;ll perform some early compilation time benchmarks of one of the most awaited C++26 features.</p>
<blockquote>
	<h3>
		<a href="https://vittorioromeo.com/index/blog/refl_compiletime.html"><strong>The hidden compile-time cost of C++26 reflection</strong></a></h3>
	<p>
		by Vittorio Romeo</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		Fast compilation times are extremely valuable to keep iteration times low, productivity and motivation high, and to quickly see the impact of your changes.</p>
	<p>
		I would love to see a world where C++26 reflection is as close as possible to a lightweight language feature [...]</p>
	<p>
		So, I decided to take some early measurements.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Tue, 31 Mar 2026 01:19:29 +0000</pubDate>
      <dc:creator>Vittorio Romeo</dc:creator>
    </item>

    <item>
      <title>Stop Choosing: Get C++ Performance in Python Algos with C++26 &#45;&#45; Richard Hickling</title>
      <link>https://isocpp.org//blog/2026/03/stop-choosing-get-cpp-performance-in-python-algos-with-c26-richard-hickling</link>
      <guid>https://isocpp.org//blog/2026/03/stop-choosing-get-cpp-performance-in-python-algos-with-c26-richard-hickling</guid>
      <description><![CDATA[<p>
	<img alt="merton-bot.png" src="https://isocpp.org/files/img/merton-bot.png" style="width: 400px; margin: 10px; float: right;" />In algorithmic trading, the Python-vs-C++ debate is usually framed as flexibility versus speed &mdash; rapid strategy development on one side, ultra-low-latency execution on the other. But with C++26 reflection, that trade-off starts to disappear, making it possible to generate Python bindings automatically while keeping the core logic running at native C++ performance.</p>
<blockquote>
	<h3>
		<a href="https://profitview.net/blog/cpp26-reflection-python-algo-trading">Stop Choosing: Get C++ Performance in Python Algos with C++26</a></h3>
	<p>
		by Richard Hickling</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		The &ldquo;religious war&rdquo; between Python and C++ in algorithmic trading usually boils down to a single trade-off:&nbsp;Python&nbsp;is faster for getting ideas to market, while&nbsp;C++&nbsp;is faster for getting orders into the book.</p>
	<p>
		But why choose? With the advent of&nbsp;C++26 Reflection, you can now have the flexibility of a Python-based strategy without the performance penalty of slow loops.</p>
	<p id="bring-in-c-rapidly-how-reflection-works">
		<strong>Bring in C++ Rapidly: How Reflection Works</strong></p>
	<p>
		The biggest hurdle in hybrid trading systems has always been the &ldquo;bridge.&rdquo; Traditionally, if you wrote a complex pricer in C++, you had to manually write &ldquo;boilerplate&rdquo; code to tell Python how to talk to it. If you added a new function, you had to update the bridge. It was tedious and error-prone.</p>
	<p>
		Reflection&nbsp;changes the game by allowing the code to &ldquo;look in the mirror&rdquo;. Instead of you manually describing your C++ functions to Python, the compiler does it for you. It programmatically inspects your classes and generates the bindings automatically.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Fri, 27 Mar 2026 19:11:17 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>CppCon 2025 Practical Reflection With C++26 &#45;&#45; Barry Revzin</title>
      <link>https://isocpp.org//blog/2026/03/cppcon-2025-practical-reflection-with-cpp26-barry-revzin</link>
      <guid>https://isocpp.org//blog/2026/03/cppcon-2025-practical-reflection-with-cpp26-barry-revzin</guid>
      <description><![CDATA[<p>
	<img alt="practical_reflection_revzin.png" src="https://isocpp.org/files/img/practical_reflection_revzin.png" style="width: 400px; margin: 10px; float: right;" />Registration is now open for CppCon 2026!&nbsp;The conference starts on September 12 and will be held&nbsp;<a href="https://cppcon.org/">in person in Aurora, CO</a>. To whet your appetite for this year&rsquo;s conference, we&rsquo;re posting videos of some of the top-rated talks from last year&#39;s conference. Here&rsquo;s another CppCon talk video we hope you will enjoy &ndash; and why not&nbsp;<a href="https://cppcon.org/registration/"><strong>register today</strong></a><strong>&nbsp;for CppCon 2026!</strong></p>
<blockquote>
	<h3>
		<a href="https://www.youtube.com/watch?v=ZX_z6wzEOG0">Practical Reflection With C++26</a></h3>
	<p>
		by Barry Revzin</p>
</blockquote>
<p>
	Summary of the talk:</p>
<blockquote>
	<p>
		With the adoption of Reflection for C++26, the landscape of what is possible has shifted. This talk will focus on implementing Struct-of-Arrays for an arbitrary aggregate, but will also take some detours to cover some techniques that will prove useful for solving a wide range of problems.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Video & On-Demand,]]></dc:subject>
      <pubDate>Thu, 26 Mar 2026 17:08:59 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>A Brief History of Bjarne Stroustrup, the Creator of C++ &#45;&#45; CultRepo</title>
      <link>https://isocpp.org//blog/2026/03/a-brief-history-of-bjarne-stroustrup-the-creator-of-cpp-cultrepo1</link>
      <guid>https://isocpp.org//blog/2026/03/a-brief-history-of-bjarne-stroustrup-the-creator-of-cpp-cultrepo1</guid>
      <description><![CDATA[<p>
	In this portrait, we meet Bjarne Stroustrup where we talk about his childhood, his accidental entry into computer science (what is "datologi" anyway?), and the ideas that shaped one of the most influential programming languages ever made -- among many, many other things... like how pronouncing his last name involves a potato.</p>
<blockquote>
	<h3>
		<a href="https://www.youtube.com/watch?v=uDtvEsv730Y">A Brief History of Bjarne Stroustrup, the Creator of C++</a></h3>
	<p>
		by CultRepo</p>
</blockquote>
<p>
	Watch now:</p>
<blockquote>
	<p>
		&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/uDtvEsv730Y?si=QD_WmemwpsAfNsVI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt;</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Video & On-Demand, Training,]]></dc:subject>
      <pubDate>Wed, 25 Mar 2026 19:07:51 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Announcing Meeting C++ 2026</title>
      <link>https://isocpp.org//blog/2026/03/announcing-meeting-cpp-2026</link>
      <guid>https://isocpp.org//blog/2026/03/announcing-meeting-cpp-2026</guid>
      <description><![CDATA[<p>
	This years Meeting C++ conference is special, as its the 15th conference in total that Meeting C++ has organized, and its also the 5th time the event is hybrid!</p>
<blockquote>
	<h2>
		<a href="https://meetingcpp.com/meetingcpp/news/items/Announcing-Meeting-Cpp-2026-.html">Announcing Meeting C++ 2026</a></h2>
	<p>
		by Jens Weller</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		We&#39;ll be meeting from the 26th - 28th November in Berlin! You have the unique chance to spend the 1st advent in Berlin with C++ and Christmas Markets open!</p>
	<p>
		With Mateusz Pusz and Kate Gregory I&#39;ve chosen two well known speakers for the keynotes this year. Mateusz is well known for his units library, which currently also is proposed for the standard. It is also an important contribution to making C++ more safe and secure, the big topic of last year. Then Kate Gregory will be visiting us in Berlin again, she is known for her ability to create great talks around technical and social aspects in our daily lives as devs. You might remember her from giving a keynote in 2017, or speaking about the aging programmer two years ago.</p>
	<p>
		For the 15th time Meeting C++ will organize a great event for 3 days filled with lots of content about C++, like last year the plan is to host 3 tracks in parallel in Berlin, with an optional 4th track. The 4th track will be unlocked either by sponsorships or ticket sales. You can be a part of this great C++ event by attending onsite and online. There is already great news for onsite attendees: Hudson River Trading is again this years t-shirt sponsor, a great and unique Meeting C++ 2026 t-shirt is an exclusive perk for onsite attendees!</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Events,]]></dc:subject>
      <pubDate>Wed, 25 Mar 2026 17:02:19 +0000</pubDate>
      <dc:creator>Meeting C++</dc:creator>
    </item>

    <item>
      <title>CppCon 2025 Threads vs Coroutines: Why C++ Has Two Concurrency Models &#45;&#45; Conor Spilsbury</title>
      <link>https://isocpp.org//blog/2026/03/cppcon-2025-threads-vs-coroutines-why-cpp-has-two-concurrency-models-conor</link>
      <guid>https://isocpp.org//blog/2026/03/cppcon-2025-threads-vs-coroutines-why-cpp-has-two-concurrency-models-conor</guid>
      <description><![CDATA[<p>
	<img alt="Threads_vs_coroutines_Conor_Spilsbury.png" src="https://isocpp.org/files/img/Threads_vs_coroutines_Conor_Spilsbury.png" style="width: 400px; margin: 10px; float: right;" />Registration is now open for CppCon 2026!&nbsp;The conference starts on September 12 and will be held&nbsp;<a href="https://cppcon.org/">in person in Aurora, CO</a>. To whet your appetite for this year&rsquo;s conference, we&rsquo;re posting videos of some of the top-rated talks from last year&#39;s conference. Here&rsquo;s another CppCon talk video we hope you will enjoy &ndash; and why not&nbsp;<a href="https://cppcon.org/registration/"><strong>register today</strong></a><strong>&nbsp;for CppCon 2026!</strong></p>
<blockquote>
	<h3>
		<a href="https://www.youtube.com/watch?v=txffplpsSzg">Threads vs Coroutines: Why C++ Has Two Concurrency Models</a></h3>
	<p>
		by Conor Spilsbury</p>
</blockquote>
<p>
	Summary of the talk:</p>
<blockquote>
	<p>
		The C++11 standard introduced a powerful set of tools for concurrency such as threads, mutexes, condition variables, and futures. More recently, C++20 introduced another powerful but fundamentally different concurrency abstraction in the form of coroutines. But coroutines are not just an evolution or a replacement for threads. Instead, they each solve different problems in different ways. Choosing the right tool for the job requires understanding how each works under the hood and where they shine. This talk will help build that intuition by looking at how each interacts with the operating system and hardware which will help make better decisions when choosing which to use.<br />
		<br />
		We&#39;ll explore how threads and synchronization primitives work at the operating-system and hardware level, from thread creation and scheduling to where context switching and synchronization introduce performance costs. We&rsquo;ll then contrast this to the coroutine model introduced in C++20 which takes a fundamentally different approach by using a cooperative model based on the suspension and resumption of work.<br />
		<br />
		Given this understanding, we&rsquo;ll finish by applying this intuition to a set of real-world scenarios to identify whether threads or coroutines are a better fit for the problem at hand.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Video & On-Demand,]]></dc:subject>
      <pubDate>Mon, 23 Mar 2026 17:05:00 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>C++26: std::is_within_lifetime &#45;&#45; Sandor Dargo</title>
      <link>https://isocpp.org//blog/2026/03/cpp26-stdis-within-lifetime-sandor-dargo</link>
      <guid>https://isocpp.org//blog/2026/03/cpp26-stdis-within-lifetime-sandor-dargo</guid>
      <description><![CDATA[<p>
	<img alt="SANDOR_DARGO_ROUND.JPG" src="https://isocpp.org/files/img/SANDOR_DARGO_ROUND.JPG" style="width: 200px; margin: 10px; float: right; height: 204px;" />When I first came across <code data-end="50" data-start="25">std::is_within_lifetime</code>, I expected another small type-traits utility &mdash; not a feature tied to checking whether a union alternative is active. But once you look closer, this seemingly narrow addition turns out to solve a surprisingly fundamental problem in constant evaluation.</p>
<blockquote>
	<h3>
		<a href="https://www.sandordargo.com/blog/2026/02/18/cpp26-std_is_within_lifetime">C++26: std::is_within_lifetime</a></h3>
	<p>
		by Sandor Dargo</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		When I was looking for the next topic for my posts, my eyes stopped on&nbsp;<code>std::is_within_lifetime</code>. Dealing with lifetime issues is a quite common source of bugs, after all. Then&nbsp;<a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2641r4.html">I clicked on the link</a>&nbsp;and I read&nbsp;<em>Checking if a union alternative is active</em>. I scratched my head. Is the link correct?</p>
	<p>
		It is &mdash; and it totally makes sense.</p>
	<p>
		Let&rsquo;s get into the details and first check what&nbsp;<a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2641r4.html">P2641R4</a>&nbsp;is about.</p>
	<p id="what-does-stdis_within_lifetime-do">
		<strong>What does&nbsp;<code>std::is_within_lifetime</code>&nbsp;do?</strong></p>
	<p>
		C++26 adds&nbsp;<code>bool std::is_within_lifetime(const T* p)</code>&nbsp;to the&nbsp;<code>&lt;type_traits&gt;</code>&nbsp;header. This function checks whether&nbsp;<code>p</code>&nbsp;points to an object that is currently within its lifetime during constant evaluation.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Thu, 19 Mar 2026 19:03:59 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>CppCon 2025 More Speed &amp;amp; Simplicity: Practical Data&#45;Oriented Design in C++ &#45;&#45; Vittorio Romeo</title>
      <link>https://isocpp.org//blog/2026/03/cppcon-2025-more-speed-simplicity-practical-data-oriented-design-in-cpp-vit</link>
      <guid>https://isocpp.org//blog/2026/03/cppcon-2025-more-speed-simplicity-practical-data-oriented-design-in-cpp-vit</guid>
      <description><![CDATA[<p>
	<img alt="More_Speed_Vittorio_Romeo.png" src="https://isocpp.org/files/img/More_Speed_Vittorio_Romeo.png" style="width: 400px; margin: 10px; float: right;" />Registration is now open for CppCon 2026!&nbsp;The conference starts on September 12 and will be held&nbsp;<a href="https://cppcon.org/">in person in Aurora, CO</a>. To whet your appetite for this year&rsquo;s conference, we&rsquo;re posting videos of some of the top-rated talks from last year&#39;s conference. Here&rsquo;s another CppCon talk video we hope you will enjoy &ndash; and why not&nbsp;<a href="https://cppcon.org/registration/"><strong>register today</strong></a><strong>&nbsp;for CppCon 2026!</strong></p>
<blockquote>
	<h3>
		<a href="https://www.youtube.com/watch?v=SzjJfKHygaQ">CppCon 2025 More Speed &amp; Simplicity: Practical Data-Oriented Design in C++</a></h3>
	<p>
		by&nbsp;Vittorio Romeo</p>
</blockquote>
<p>
	Summary of the talk:</p>
<blockquote>
	<p>
		Data-Oriented Design (DOD) presents a different way of thinking: prioritizing data layout not only unlocks significant performance gains via cache efficiency but can also lead to surprising simplicity in the code that actually processes the data.</p>
	<p>
		This talk is a practical introduction for C++ developers familiar with OOP. Through a step-by-step refactoring of a conventional OOP design, we&rsquo;ll both cover how data access patterns influence speed and how a data-first approach can clarify intent.</p>
	<p>
		We&rsquo;ll measure the performance impact with benchmarks and analyze how the refactored code, particularly the data processing loops, can become more direct and conceptually simpler.</p>
	<p>
		Key techniques like Structure-of-Arrays (SoA) vs. Array-of-Structures (AoS) will be explained and benchmarked, considering their effects on both execution time and code clarity. We&rsquo;ll pragmatically weigh the strengths (performance, simpler data logic) and weaknesses of DOD, highlighting how it can complement, not just replace, OOP.</p>
	<p>
		We&rsquo;ll also demonstrate that DOD doesn&rsquo;t necessitate abandoning robust abstractions, showcasing C++ techniques for creating safe, expressive APIs that manage both complexity and performance.</p>
	<p>
		Let&rsquo;s learn how thinking &ldquo;data-first&rdquo; can make your C++ code faster and easier to reason about!</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Video & On-Demand,]]></dc:subject>
      <pubDate>Wed, 18 Mar 2026 16:59:04 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>The cost of a function call &#45;&#45; Daniel Lemire</title>
      <link>https://isocpp.org//blog/2026/03/the-cost-of-a-function-call-daniel-lemire</link>
      <guid>https://isocpp.org//blog/2026/03/the-cost-of-a-function-call-daniel-lemire</guid>
      <description><![CDATA[<p>
	<img alt="Capture-decran-le-2026-02-08-a-15.07.17-825x510.png" src="https://isocpp.org/files/img/Capture-decran-le-2026-02-08-a-15.07.17-825x510.png" style="width: 400px; margin: 10px; float: right;" />Function calls are cheap &mdash; but they are not free &mdash; and in tight loops their cost can dominate your runtime. Modern compilers rely on inlining to remove that overhead and unlock deeper optimizations, sometimes turning an ordinary loop into dramatically faster SIMD code.</p>
<blockquote>
	<h3>
		<a href="https://lemire.me/blog/2026/02/08/the-cost-of-a-function-call/">The cost of a function call</a></h3>
	<p>
		by Daniel Lemire</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		When programming, we chain functions together. Function A calls function B. And so forth.</p>
	<p>
		You do not have to program this way, you could write an entire program using a single function. It would be a fun exercise to write a non-trivial program using a single function&hellip; as long as you delegate the code writing to AI because human beings quickly struggle with long functions.</p>
	<p>
		A key compiler optimization is &lsquo;inlining&rsquo;: the compiler takes your function definition and it tries to substitute it at the call location. It is conceptually quite simple. Consider the following example where the function&nbsp;<code>add3</code>&nbsp;calls the function&nbsp;<code>add</code>.</p>
	<div>
		<pre>
<code>int add(int x, int y) &#123; &#10;     return x + y; &#10;&#125; &#10;int add3(int x, int y, int z) &#123; &#10;     return add(add(x, y), z); &#10;&#125; </code></pre>
	</div>
	<p>
		You can manually inline the call as follows.</p>
	<div>
		<pre>
<code>int add3(int x, int y, int z) &#123; &#10;     return x + y + z; &#10;&#125;</code></pre>
	</div>
</blockquote>
<p>
	&nbsp;</p>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Tue, 17 Mar 2026 18:56:34 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Implementing vector &#45;&#45; Quasar Chunawala</title>
      <link>https://isocpp.org//blog/2026/03/implementing-vectort-quasar-chunawala</link>
      <guid>https://isocpp.org//blog/2026/03/implementing-vectort-quasar-chunawala</guid>
      <description><![CDATA[<p>
	<img alt="logo.png" src="https://isocpp.org/files/img/logo.png" style="width: 225px; margin: 10px; float: right;" />Finding out how to implement features from the standard library can be a useful learning exercise. Quasar Chunawala explores implementing your own version of std::vector.</p>
<blockquote>
	<h3>
		<a href="https://accu.org/journals/overload/34/191/chunawala/">Implementing vector&lt;T&gt;</a></h3>
	<p>
		by Quasar Chunawala</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		The most fundamental STL data-structure is the&nbsp;<code>vector</code>. In this article, I am going to explore writing a custom implementation of the&nbsp;<code>vector</code>&nbsp;data-structure. The standard library implementation&nbsp;<code>std::vector</code>&nbsp;is a work of art, it is extremely efficient at managing memory and has been tested&nbsp;<em>ad nauseam</em>. It is much better, in fact, than a homegrown alternative would be.</p>
	<p>
		Why then write our own custom&nbsp;<code>vector</code>?</p>
	<ul>
		<li>
			Writing a naive implementation is challenging and rewarding. It is a lot of fun!</li>
		<li>
			Coding up these training implementations, thinking about corner cases, getting your code reviewed, revisiting your design is very effective at understanding the inner workings of STL data-structures and writing good C++ code.</li>
		<li>
			Its a good opportunity to learn about low-level memory management algorithms.</li>
	</ul>
	<p>
		We are not aiming for an exhaustive representation or implementation, but we will write test cases for all basic functionalities expected out of a&nbsp;<code>vector</code>-like data-structure.</p>
	<p>
		Informally, a&nbsp;<code>std::vector&lt;T&gt;</code>&nbsp;represents a dynamically allocated array that can grow as needed. As with any array, a&nbsp;<code>std::vector&lt;T&gt;</code>&nbsp;is a sequence of elements of type&nbsp;<code>T</code>&nbsp;arranged contiguously in memory. We will put our homegrown version of&nbsp;<code>vector&lt;T&gt;</code>&nbsp;under the&nbsp;<code>dev</code>&nbsp;namespace.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Wed, 11 Mar 2026 18:54:09 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Flavours of Reflection &#45;&#45; Bernard Teo</title>
      <link>https://isocpp.org//blog/2026/03/flavours-of-reflection-bernard-teo</link>
      <guid>https://isocpp.org//blog/2026/03/flavours-of-reflection-bernard-teo</guid>
      <description><![CDATA[<p>
	Reflection is coming to C++26 and is arguably the most anticipated feature accepted into this version of the standard. With substantial implementation work already done in Clang and GCC, compile-time reflection in C++ is no longer theoretical &mdash; it&rsquo;s right around the corner.</p>
<blockquote>
	<h3>
		<a href="https://semantics.bernardteo.me/2026/01/30/flavours-of-reflection.html">Flavours of Reflection:&nbsp;Comparing C++26 reflection with similar capabilities in other programming languages</a></h3>
	<p>
		by Bernard Teo</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		Reflection is imminent. It is set to be part of C++26, and it is perhaps the most anticipated feature accepted into this version of the standard. Lots of implementation work has already been done for&nbsp;<a href="https://github.com/bloomberg/clang-p2996/tree/p2996">Clang</a>&nbsp;and&nbsp;<a href="https://gcc.gnu.org/pipermail/gcc-patches/2025-November/700733.html">GCC</a>&nbsp;&mdash; they pretty much already work (both are on Compiler Explorer), and it hopefully won&rsquo;t be too long before they get merged into their respective compilers.</p>
	<p>
		Many programming languages already provide some reflection capabilities, so some people may think that C++ is simply playing catch-up. However, C++&rsquo;s reflection feature does differ in important ways. This blog post explores the existing reflection capabilities of Python, Java, C#, and Rust, comparing them with one another as well as with the flavour of reflection slated for C++26.</p>
	<p>
		In the rest of this blog post, the knowledge of C++ fundamentals is assumed (but not for the other programming languages, where non-commonsensical code will be explained).</p>
	<p id="the-example">
		&nbsp;</p>
</blockquote>
<p>
	&nbsp;</p>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Tue, 03 Mar 2026 18:48:20 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>IIFE for Complex Initialization &#45;&#45; Bartlomiej Filipek</title>
      <link>https://isocpp.org//blog/2026/02/iife-for-complex-initialization-bartlomiej-filipek1</link>
      <guid>https://isocpp.org//blog/2026/02/iife-for-complex-initialization-bartlomiej-filipek1</guid>
      <description><![CDATA[<p>
	<img alt="filipek-iife.png" src="https://isocpp.org/files/img/filipek-iife.png" style="width: 366px; margin: 10px; float: right;" />What do you do when the code for a variable initialization is complicated? Do you move it to another method or write inside the current scope? Bartlomiej Filipek presents a trick that allows computing a value for a variable, even a const variable, with a compact notation.</p>
<blockquote>
	<h3>
		<a href="https://www.cppstories.com/2016/11/iife-for-complex-initialization/">IIFE for Complex Initialization</a></h3>
	<p>
		by Bartlomiej Filipek</p>
</blockquote>
<p>
	In this article:</p>
<blockquote>
	<p>
		I hope you&rsquo;re initializing most variables as&nbsp;<code>const</code>&nbsp;(so that the code is more explicit, and also compiler can reason better about the code and optimize).</p>
	<p>
		For example, it&rsquo;s easy to write:</p>
	<div>
		<pre tabindex="0">
<code data-lang="cpp">const int myParam = inputParam * 10 + 5; </code></pre>
	</div>
	<p>
		or even:</p>
	<div>
		<pre tabindex="0">
<code data-lang="cpp">const int myParam = bCondition ? inputParam*2 : inputParam + 10; </code></pre>
	</div>
	<p>
		But what about complex expressions? When we have to use several lines of code, or when the&nbsp;<code>?</code>&nbsp;operator is not sufficient.</p>
	<p>
		&lsquo;It&rsquo;s easy&rsquo; you say: you can wrap that initialization into a separate function.</p>
	<p>
		While that&rsquo;s the right answer in most cases, I&rsquo;ve noticed that in reality a lot of people write code in the current scope. That forces you to stop using&nbsp;<code>const</code>&nbsp;and code is a bit uglier.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Fri, 27 Feb 2026 18:43:58 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Range adaptors – 5 years after C++20 &#45;&#45; Hannes Hauswedell</title>
      <link>https://isocpp.org//blog/2026/02/range-adaptors-5-years-after-cpp20-hannes-hauswedell-meetingc-2025</link>
      <guid>https://isocpp.org//blog/2026/02/range-adaptors-5-years-after-cpp20-hannes-hauswedell-meetingc-2025</guid>
      <description><![CDATA[<p>
	A look back on major design decisions in C++ Ranges and how they may be viewed today.</p>
<blockquote>
	<h3>
		<a href="https://www.youtube.com/watch?v=nficAvk5RA4" target="_blank">Range adaptors - 5 years after C++20</a></h3>
	<p>
		by Hannes Hauswedell</p>
</blockquote>
<p>
	Watch now:</p>
<blockquote>
	<div class="embed_media">
		&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="315" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/nficAvk5RA4?si=w86EVk7oX89uVcPg" title="YouTube video player" width="560"&gt;&lt;/iframe&gt;</div>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Video & On-Demand,]]></dc:subject>
      <pubDate>Mon, 23 Feb 2026 22:19:26 +0000</pubDate>
      <dc:creator>Hannes Hauswedell</dc:creator>
    </item>

    <item>
      <title>So how do you quickly concatenate strings? &#45;&#45; Aleksandr Orefkov</title>
      <link>https://isocpp.org//blog/2026/02/so-how-do-you-quickly-concatenate-strings-aleksandr-orefkov</link>
      <guid>https://isocpp.org//blog/2026/02/so-how-do-you-quickly-concatenate-strings-aleksandr-orefkov</guid>
      <description><![CDATA[<blockquote>
	<h3>
		<a href="https://orefkov.github.io/simstr/articles/fast_concat.html">So how do you quickly concatenate strings?</a></h3>
</blockquote>
<blockquote>
	<p>
		By Aleksandr Orefkov</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		All practicing programmers have to concatenate strings. Precisely concatenate, we don&rsquo;t have some JavaScript or PHP, in C++ we have this fancy word for it. Programmers in other languages &#8203;&#8203;simply &ldquo;add&rdquo; strings together without much thought, without even thinking about this operation. After all, what could be simpler than</p>
	<pre class="prettyprint lang-cpp">
return "The answer is " + str_answer + ", count is " + count;</pre>
	<p>
		But while it&rsquo;s forgivable for script kiddies not to think about the meaning behind such a simple notation, it&rsquo;s unacceptable for an experienced developer to approach such an important issue so irresponsibly. An experienced developer, imagining such C++ code, immediately sees the terrifying abyss of problems that such an approach can create.</p>
	<p>
		What type is str_answer? What type is count? &ldquo;The answer is &ldquo; and &ldquo;, count is &ldquo; - are literals that add to std::string as a const char*. So, strlen will be called. I wonder if the compiler will be able to optimize and calculate their length at compile time? Oh well, it seems like constexpr is in the addition, let&rsquo;s hope so.<br />
		This is the first level of problems for now. And let&rsquo;s say we successfully solved them, creating the following code:</p>
	<pre class="prettyprint lang-cpp">
std::string make_answer(std::string_view str_answer, int count) {&#10;    return "The answer is " + std::string{str_answer}&#10;        + ", count is " + std::to_string(count);&#10;}&#10;</pre>
	<p>
		It sounds like &ldquo;Hurray!&rdquo;, but it&rsquo;s somehow not loud enough&hellip;</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Thu, 19 Feb 2026 20:04:04 +0000</pubDate>
      <dc:creator>AOrefkov</dc:creator>
    </item>

    <item>
      <title>15 Different Ways to Filter Containers in Modern C++ &#45;&#45; Bartłomiej Filipek</title>
      <link>https://isocpp.org//blog/2026/02/15-different-ways-to-filter-containers-in-modern-cpp-bartomiej-filipek1</link>
      <guid>https://isocpp.org//blog/2026/02/15-different-ways-to-filter-containers-in-modern-cpp-bartomiej-filipek1</guid>
      <description><![CDATA[<p>
	<img alt="logo.png" src="https://isocpp.org/files/img/logo.png" style="width: 225px; margin: 10px; float: right;" />Filtering items from a container is a common situation. Bart&#322;omiej Filipek demonstrates various approaches from different versions of C++.</p>
<blockquote>
	<h3>
		<a href="https://accu.org/journals/overload/33/190/filipek/">15 Different Ways to Filter Containers in Modern C++</a></h3>
	<p>
		by Bart&#322;omiej Filipek</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		Do you know how many ways we can implement a filter function in C++? While the problem is relatively easy to understand &ndash; take a container, copy elements that match a predicate and the return a new container &ndash; it&rsquo;s good to exercise with the C++ Standard Library and check a few ideas. We can also apply some modern C++ techniques, including C++23. Let&rsquo;s start!</p>
	<p>
		<strong>The problem statement</strong></p>
	<p>
		To be precise by a&nbsp;<em>filter</em>, I mean a function with the following interface:</p>
	<pre>
  auto Filter(const Container&amp; cont,&#10;              UnaryPredicate p) {}</pre>
	<p>
		It takes a container and a predicate, and then it creates an output container with elements that satisfy the predicate. We can use it like the following:</p>
	<pre>
  const std::vector&lt;std::string&gt; vec{&#10;    "Hello", "**txt", "World", "error", "warning",&#10;    "C++", "****" };&#10;  auto filtered = Filter(vec, [](auto&amp; elem) {&#10;    return !elem.starts_with(&#39;*&#39;); });&#10;    // filtered should have "Hello", "World",&#10;    // "error", "warning", "C++"</pre>
	<p>
		Writing such a function can be a good exercise with various options and algorithms in the Standard Library. What&rsquo;s more, our function hides internal things like iterators, so it&rsquo;s more like a range-based version.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Tue, 17 Feb 2026 23:09:00 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Coroutines – A Deep Dive &#45;&#45; Quasar Chunawala</title>
      <link>https://isocpp.org//blog/2026/02/coroutines-a-deep-dive-quasar-chunawala1</link>
      <guid>https://isocpp.org//blog/2026/02/coroutines-a-deep-dive-quasar-chunawala1</guid>
      <description><![CDATA[<p>
	<img alt="logo.png" src="https://isocpp.org/files/img/logo.png" style="width: 225px; margin: 10px; float: right;" />Coroutines are powerful but require some boilerplate code. Quasar Chunawala explains what you need to implement to get coroutines working.</p>
<blockquote>
	<h3>
		<a href="https://accu.org/journals/overload/33/190/chunawala/">Coroutines &ndash; A Deep Dive</a></h3>
	<p>
		by Quasar Chunawala</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		Following on from the introduction in the editorial, let&rsquo;s understand the basic mechanics needed to code up a simple coroutine, and I&rsquo;ll show you how to yield from the coroutine and await results.</p>
	<p>
		<strong>The simplest coroutine</strong></p>
	<p>
		The following code is the simplest implementation of a coroutine:</p>
	<pre>
  #include &lt;coroutine&gt;&#10;  void coro_func(){&#10;    co_return;&#10;  }&#10;  int main(){&#10;    coro_func();&#10;  }</pre>
	<p>
		Our first coroutine will just return nothing. It will not do anything else. Sadly, the preceding code is too simple for a functional coroutine and it will not compile. When compiling with gcc 15.2, we get the error shown in Figure 1.</p>
	<table style="width:778px;">
		<tbody>
			<tr>
				<td>
					<pre>
&lt;source&gt;: In function &#39;void coro_func()&#39;:&#10;&lt;source&gt;:4:5: error: unable to find the promise type for this coroutine&#10;    4 |     co_return;&#10;      |     ^~~~~~~~~</pre>
				</td>
			</tr>
			<tr>
				<td>
					&nbsp;</td>
			</tr>
		</tbody>
	</table>
	Looking at C++ reference, we see that the return type of a coroutine must define a type named&nbsp;<code>promise_type</code>. Why do we need a promise? The&nbsp;<code>promise_type</code>&nbsp;is the second important piece in the coroutine mechanism. We can draw an analogy from futures and promises which are essential blocks for achieving asynchronous programming in C++. The future is the thing, that the function that does the asynchronous computation, hands out back to the caller, that the caller can use to retrieve the result by invoking the&nbsp;<code>get()</code>&nbsp;member function. The future has the role of the return object.&nbsp;</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Fri, 13 Feb 2026 23:06:51 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Concurrency Flavours &#45;&#45; Lucian Radu Teodorescu</title>
      <link>https://isocpp.org//blog/2026/02/concurrency-flavours-lucian-radu-teodorescu1</link>
      <guid>https://isocpp.org//blog/2026/02/concurrency-flavours-lucian-radu-teodorescu1</guid>
      <description><![CDATA[<p>
	<img alt="logo.png" src="https://isocpp.org/files/img/logo.png" style="width: 225px; margin: 10px; float: right;" />Concurrency has many different approaches. Lucian Radu Teodorescu clarifies terms, showing how different approaches solve different problems.</p>
<blockquote>
	<h3>
		<a href="https://accu.org/journals/overload/33/190/teodorescu/">Concurrency Flavours</a></h3>
	<p>
		by Lucian Radu Teodorescu</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		Most engineers today use concurrency &ndash; often without a clear understanding of what it is, why it&rsquo;s needed, or which flavour they&rsquo;re dealing with. The vocabulary around concurrency is rich but muddled. Terms like parallelism, multithreading, asynchrony, reactive programming, and structured concurrency are regularly conflated &ndash; even in technical discussions.</p>
	<p>
		This confusion isn&rsquo;t just semantic &ndash; it leads to real-world consequences. If the goal behind using concurrency is unclear, the result is often poor concurrency &ndash; brittle code, wasted resources, or systems that are needlessly hard to reason about. Choosing the right concurrency strategy requires more than knowing a framework or following a pattern &ndash; it requires understanding what kind of complexity you&rsquo;re introducing, and why.</p>
	<p>
		To help clarify this complexity, the article aims to map out some of the main flavours of concurrency. Rather than defining terms rigidly, we&rsquo;ll explore the motivations behind them &ndash; and the distinct mindsets they evoke. While this article includes a few C++ code examples (using features to be added in C++26), its focus is conceptual &ndash; distinguishing between the flavours of concurrency. Our goal is to refine the reader&rsquo;s taste for concurrency.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Wed, 04 Feb 2026 23:03:50 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Exclusive state access, I &#45;&#45; Andrzej Krzemieński</title>
      <link>https://isocpp.org//blog/2026/01/value-semantics-andrzej-krzemieski</link>
      <guid>https://isocpp.org//blog/2026/01/value-semantics-andrzej-krzemieski</guid>
      <description><![CDATA[<p>
	<img alt="krzemienskivaluesemantics.png" src="https://isocpp.org/files/img/krzemienskivaluesemantics.png" style="width: 400px; margin: 10px; float: right;" />Value semantics is a way of structuring programs around what values mean, not where objects live, and C++ is explicitly designed to support this model. In a value-semantic design, objects are merely vehicles for communicating state, while identity, address, and physical representation are intentionally irrelevant.</p>
<blockquote>
	<h3>
		<a href="https://thecppway.com/posts/value_semantics/">Exclusive state access, I</a></h3>
	<p>
		by Andrzej Krzemie&#324;ski</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		<em>Value semantics</em>&nbsp;is a way of organizing your programs, which C++ supports and endorses. Its key characteristics in a nutshell:</p>
	<ol>
		<li>
			Throughout its lifetime an object (via its type and special member functions) is used to represent a&nbsp;<em>value</em>.</li>
		<li>
			Different parts of the program communicate values via objects. While the value matters, objects themselves (their address, their&nbsp;<code>sizeof</code>) do not.</li>
		<li>
			Object&rsquo;s value is isolated from other objects&rsquo; values.</li>
	</ol>
	<p>
		This begs the question,&nbsp;<em>what is value</em>, but we will not answer it. First, because it is difficult, and maybe impossible. It is pretty clear what value objects of type&nbsp;<code>int</code>&nbsp;represent. It is fairly uncontroversial what value is represented by&nbsp;<code>vector&lt;int&gt;</code>, once we accept that the value representation need not fit into the&nbsp;<code>sizeof</code>&nbsp;of the object, but can spread across other memory locations and resources, and that vector&rsquo;s capacity is not part of this value, even though it is part of its&nbsp;<em>state</em>. But there are things like&nbsp;<code>std::mutex</code>&nbsp;where naming the value is tricky.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Tue, 27 Jan 2026 22:55:53 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Singleton done right in C++ &#45;&#45; Andreas Fertig</title>
      <link>https://isocpp.org//blog/2026/01/singleton-done-right-in-cpp-andreas-fertig</link>
      <guid>https://isocpp.org//blog/2026/01/singleton-done-right-in-cpp-andreas-fertig</guid>
      <description><![CDATA[<p>
	<img alt="andreasfertig.png" src="https://isocpp.org/files/img/andreasfertig.png" style="width: 300px; margin: 10px; float: right; height: 371px;" />In today&#39;s post, I like to touch on a controversial topic: singletons. While I think it is best to have a codebase without singletons, the real-world shows me that singletons are often part of codebases.</p>
<blockquote>
	<h3>
		<a href="https://andreasfertig.com/blog/2026/01/singleton-done-right-in-cpp/">Singleton done right in C++</a></h3>
	<p>
		by Andreas Fertig</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		Let&#39;s use a usage pattern for a singleton that I see frequently, a system-wide logger. A simple implementation can look like the following code:</p>
	<p>
		class Logger {<br />
		&nbsp; Logger() = default;</p>
	<p>
		public:<br />
		&nbsp; static Logger&amp; Instance()<br />
		&nbsp; {<br />
		&nbsp;&nbsp;&nbsp; static Logger theOneAndOnlyLogger{};</p>
	<p>
		&nbsp;&nbsp;&nbsp; return theOneAndOnlyLogger;<br />
		&nbsp; }</p>
	<p>
		&nbsp; void Info(std::string_view msg) { std::print("Info: {}", msg); }<br />
		&nbsp; void Error(std::string_view msg) { std::print("Error: {}", msg); }<br />
		};</p>
	<p>
		The key parts for a singleton in C++ are that the constructor is private and an access function that is static. With that, you ensure that a singleton object, here Logger can only be constructed by calling Instance, essentially limiting the number of Logger objects to a single one.</p>
	<p>
		You&#39;re using such a Logger like this:</p>
	<p>
		Logger::Instance().Info("A test");</p>
</blockquote>
<pre class="prettyprint lang-cpp">
&#10;&#10;</pre>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Wed, 21 Jan 2026 18:21:26 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Talk: Who’s Afraid of the Big Bad Template &#45;&#45; Coral Kashri</title>
      <link>https://isocpp.org//blog/2026/01/talk-whos-afraid-of-the-big-bad-template-coral-kashri1</link>
      <guid>https://isocpp.org//blog/2026/01/talk-whos-afraid-of-the-big-bad-template-coral-kashri1</guid>
      <description><![CDATA[<p>
	<img alt="2026-01-09_11-18-10.png" src="https://isocpp.org/files/img/2026-01-09_11-18-10.png" style="width: 400px; margin: 10px; float: right;" /></p>
<p>
	Templates and metaprogramming considered as the big bad wolf of C++, and it&rsquo;s time to stop being scared of this wolf, as it&rsquo;s one of the most powerful creatures of C++.</p>
<blockquote>
	<h3>
		<a href="https://cppsenioreas.wordpress.com/2026/01/06/talk-whos-afraid-of-the-big-bad-template/">Talk: Who&rsquo;s Afraid of the Big Bad Template</a></h3>
	<p>
		by Coral Kashri</p>
</blockquote>
<p>
	From the description:</p>
<blockquote>
	<p>
		In this talk I&rsquo;ve demonstrated the power of this incredible creature, while I hope that this talk would be an easy enterence to this concept (pan intended), and to help you developing the anticipation to walk into the cave of metaprogramming.</p>
	<p>
		The talk was give on Core C++ 2025.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Product News, Video & On-Demand,]]></dc:subject>
      <pubDate>Thu, 15 Jan 2026 18:15:57 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Talk: Who’s Afraid of the Big Bad Template &#45;&#45; Coral Kashri</title>
      <link>https://isocpp.org//blog/2026/01/talk-whos-afraid-of-the-big-bad-template-coral-kashri</link>
      <guid>https://isocpp.org//blog/2026/01/talk-whos-afraid-of-the-big-bad-template-coral-kashri</guid>
      <description><![CDATA[<p>
	&nbsp;</p>
<p>
	<img alt="2026-01-09_11-18-10.png" src="https://isocpp.org/files/img/2026-01-09_11-18-10.png" style="width: 400px; margin: 10px; float: right;" /></p>
<p>
	Templates and metaprogramming considered as the big bad wolf of C++, and it&rsquo;s time to stop being scared of this wolf, as it&rsquo;s one of the most powerful creatures of C++.</p>
<blockquote>
	<h3>
		<a href="https://cppsenioreas.wordpress.com/2026/01/06/talk-whos-afraid-of-the-big-bad-template/">Talk: Who&rsquo;s Afraid of the Big Bad Template</a></h3>
	<p>
		by Coral Kashri</p>
</blockquote>
<p>
	From the description:</p>
<blockquote>
	<p>
		In this talk I&rsquo;ve demonstrated the power of this incredible creature, while I hope that this talk would be an easy enterence to this concept (pan intended), and to help you developing the anticipation to walk into the cave of metaprogramming.</p>
	<p>
		The talk was give on Core C++ 2025.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Product News, Video & On-Demand,]]></dc:subject>
      <pubDate>Thu, 15 Jan 2026 18:15:10 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>2025, A Year of Conferences &#45;&#45; Sandor Dargo</title>
      <link>https://isocpp.org//blog/2026/01/2025-a-year-of-conferences-sandor-dargo</link>
      <guid>https://isocpp.org//blog/2026/01/2025-a-year-of-conferences-sandor-dargo</guid>
      <description><![CDATA[<p>
	<img alt="cpponsea2025-folkestone-to-dover.jpg" src="https://isocpp.org/files/img/cpponsea2025-folkestone-to-dover.jpg" style="width: 400px; margin: 10px; float: right;" />Conferences are never just about the talks &mdash; they&rsquo;re about time, travel, tradeoffs, and the people you meet along the way. After a year of attending several C++ events across formats and cities, this post is a personal look at how different conferences balance technical depth, community, and the experience of being there.</p>
<blockquote>
	<h3>
		<a href="https://www.sandordargo.com/blog/2025/12/17/conferences-2025">2025, A Year of Conferences</a></h3>
	<p>
		by Sandor Dargo</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		This year I had the chance to attend three conferences onsite, plus one online, and even a meetup in my hometown, Budapest. Depending on who you ask, maybe it&rsquo;s not a lot &mdash; I know some speakers do twice as many. But if you ask my family, you&rsquo;d probably get a different (and understandable) answer. For me &mdash; for us &mdash; it&rsquo;s a lot. It&rsquo;s also an honour and a privilege in many ways.</p>
	<p>
		To express my appreciation and gratitude toward the organizers and the community, I do two things:</p>
	<ul>
		<li>
			I try to prepare well for my talks.</li>
		<li>
			I post&nbsp;<a href="https://www.sandordargo.com/tags/tripreport/">trip reports</a>&nbsp;soon after each event &mdash; usually within a week.</li>
	</ul>
	<p>
		Those&nbsp;<a href="https://www.sandordargo.com/tags/tripreport/">trip reports</a>&nbsp;are moderately personal: I share which talks I liked and also some of my impressions, but I try to make them useful rather than purely personal. Still, I think that once in a while, a more personal, less serious post has its place &mdash; and that&rsquo;s what this one wanted to be originally.</p>
	<p>
		At one of the social dinners at CppCon, a developer working for a FAANG company in New York asked me which conference I&rsquo;d recommend. My answer: it depends on your goals &mdash; and your budget and constraints.</p>
	<p>
		&nbsp;</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Fri, 09 Jan 2026 17:33:55 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>A Guest Editorial &#45;&#45; Quasar Chunawala, Frances Buontempo</title>
      <link>https://isocpp.org//blog/2026/01/a-guest-editorial-quasar-chunawala-frances-buontempo</link>
      <guid>https://isocpp.org//blog/2026/01/a-guest-editorial-quasar-chunawala-frances-buontempo</guid>
      <description><![CDATA[<p>
	<img alt="2025-12-19_10-30-29.png" src="https://isocpp.org/files/img/2025-12-19_10-30-29.png" style="width: 241px; margin: 10px; float: right;" />C++20 introduced coroutines. Quasar Chunawala, our guest editor for this edition, gives an overview.</p>
<blockquote>
	<h3>
		<a href="https://accu.org/journals/overload/33/190/chunawala-buontempo/">A Guest Editorial</a></h3>
	<p>
		by Quasar Chunawala, Frances Buontempo</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		You&rsquo;ve likely heard about this new C++20 feature,&nbsp;coroutines. I think that this is a really important subject and there are several cool use-cases for coroutines. A&nbsp;coroutine&nbsp;in the simplest terms is just a function that you can pause in the middle. At a later point the caller will decide to resume the execution of the function right where you left off. Unlike a function therefore, coroutines are always stateful - you at least need to remember where you left off in the function body.</p>
	<p>
		Coroutines can simplify our code! Coroutines are a great tool, when it comes to implementing parsers.</p>
	<p>
		<strong>The coroutine return type</strong></p>
	<p>
		The initial call to the coroutine function will produce a return object of a certain&nbsp;<code>ReturnType</code>&nbsp;and hand it back to the caller. The interface of this type is what is going to determine what the coroutine is capable of. Since coroutines are super-flexible, we can do a whole lot with this return object. If you have some coroutine, and you want to understand what it&rsquo;s doing, the first thing you should look at is the&nbsp;<code>ReturnType</code>, and what it&rsquo;s interface is. The important thing here is, we design this&nbsp;<code>ReturnType</code>. If you are writing a coroutine, you can decide what goes into this interface.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Wed, 07 Jan 2026 17:29:04 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>15 Different Ways to Filter Containers in Modern C++ &#45;&#45; Bartłomiej Filipek</title>
      <link>https://isocpp.org//blog/2026/01/15-different-ways-to-filter-containers-in-modern-cpp-bartomiej-filipek</link>
      <guid>https://isocpp.org//blog/2026/01/15-different-ways-to-filter-containers-in-modern-cpp-bartomiej-filipek</guid>
      <description><![CDATA[<p>
	<img alt="logo.png" src="https://isocpp.org/files/img/logo.png" style="width: 225px; margin: 10px; float: right;" />Filtering items from a container is a common situation. Bart&#322;omiej Filipek demonstrates various approaches from different versions of C++.</p>
<blockquote>
	<h3>
		<a href="https://accu.org/journals/overload/33/190/filipek/">15 Different Ways to Filter Containers in Modern C++</a></h3>
	<p>
		by Bart&#322;omiej Filipek</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		Do you know how many ways we can implement a filter function in C++? While the problem is relatively easy to understand &ndash; take a container, copy elements that match a predicate and the return a new container &ndash; it&rsquo;s good to exercise with the C++ Standard Library and check a few ideas. We can also apply some modern C++ techniques, including C++23. Let&rsquo;s start!</p>
	<p>
		<strong>The problem statement</strong></p>
	<p>
		To be precise by a&nbsp;<em>filter</em>, I mean a function with the following interface:</p>
	<pre>
  auto Filter(const Container&amp; cont,&#10;              UnaryPredicate p) {}</pre>
	<p>
		It takes a container and a predicate, and then it creates an output container with elements that satisfy the predicate. We can use it like the following:</p>
	<pre>
  const std::vector&lt;std::string&gt; vec{&#10;    "Hello", "**txt", "World", "error", "warning",&#10;    "C++", "****" };&#10;  auto filtered = Filter(vec, [](auto&amp; elem) {&#10;    return !elem.starts_with(&#39;*&#39;); });&#10;    // filtered should have "Hello", "World",&#10;    // "error", "warning", "C++"</pre>
	<p>
		Writing such a function can be a good exercise with various options and algorithms in the Standard Library. What&rsquo;s more, our function hides internal things like iterators, so it&rsquo;s more like a range-based version.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Mon, 05 Jan 2026 17:26:51 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Time in C++: std::chrono::high_resolution_clock:  Myths and Realities &#45;&#45; Sandor Dargo</title>
      <link>https://isocpp.org//blog/2026/01/time-in-cpp-stdchronohigh-resolution-clock-myths-and-realities-sandor-dargo</link>
      <guid>https://isocpp.org//blog/2026/01/time-in-cpp-stdchronohigh-resolution-clock-myths-and-realities-sandor-dargo</guid>
      <description><![CDATA[<p>
	<img alt="SANDOR_DARGO_ROUND.JPG" src="https://isocpp.org/files/img/SANDOR_DARGO_ROUND.JPG" style="width: 200px; margin: 10px; float: right; height: 204px;" />std::chrono::high_resolution_clock sounds like the obvious choice when you care about precision, but its name hides some important caveats. In this article, we&rsquo;ll demystify what &ldquo;high resolution&rdquo; really means in &lt;chrono&gt;, why this clock is often just an alias, and when&mdash;if ever&mdash;it&rsquo;s actually the right tool to use.</p>
<blockquote>
	<h3>
		<a href="https://www.sandordargo.com/blog/2025/12/10/clocks-part-4-high_resolution_clock">Time in C++: std::chrono::high_resolution_clock - Myths and Realities</a></h3>
	<p>
		by Sandor Dargo</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		If there&rsquo;s one clock in&nbsp;<code>&lt;chrono&gt;</code>&nbsp;that causes the most confusion, it&rsquo;s&nbsp;<code>std::chrono::high_resolution_clock</code>. The name sounds too tempting &mdash; who wouldn&rsquo;t want &ldquo;the highest resolution&rdquo;? But like many things in C++, the details matter.</p>
	<p>
		In the earlier parts of this series, we looked at&nbsp;<a href="https://www.sandordargo.com/blog/2025/11/26/clocks-part-2-system_clock"><code>system_clock</code>&nbsp;as the wall-clock time source</a>, and at&nbsp;<a href="https://www.sandordargo.com/blog/2025/12/03/clocks-part-3-steady_clock"><code>steady_clock</code>&nbsp;as the reliable choice for measuring intervals</a>. This time, we&rsquo;ll tackle the so-called &ldquo;high-resolution&rdquo; clock, separate fact from myth, and see why it&rsquo;s not always the right choice &mdash; even when you think you need precision.</p>
	<p id="what-high-resolution-actually-means">
		<strong>What &ldquo;high resolution&rdquo; actually means</strong></p>
	<p>
		A clock&rsquo;s resolution (or precision) is the granularity of its tick period &mdash; i.e., the smallest representable step in time for that clock&rsquo;s&nbsp;<code>time_point</code>. In&nbsp;<code>&lt;chrono&gt;</code>&nbsp;it&rsquo;s exposed via&nbsp;<code>Clock::period</code>, a&nbsp;<code>std::ratio</code>.</p>
	<p>
		Notice an important difference. I didn&rsquo;t mention accuracy, only precision. A clock might represent nanoseconds, but still be inaccurate due to hardware or OS scheduling. A higher resolution doesn&rsquo;t necessarily mean better measurement. For timing, stability and monotonicity matter much more than how fine-grained the tick is.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Fri, 02 Jan 2026 17:22:21 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Coroutines – A Deep Dive &#45;&#45; Quasar Chunawala</title>
      <link>https://isocpp.org//blog/2025/12/coroutines-a-deep-dive-quasar-chunawala</link>
      <guid>https://isocpp.org//blog/2025/12/coroutines-a-deep-dive-quasar-chunawala</guid>
      <description><![CDATA[<p>
	<img alt="logo.png" src="https://isocpp.org/files/img/logo.png" style="width: 225px; margin: 10px; float: right;" />Coroutines are powerful but require some boilerplate code. Quasar Chunawala explains what you need to implement to get coroutines working.</p>
<blockquote>
	<h3>
		<a href="https://accu.org/journals/overload/33/190/chunawala/">Coroutines &ndash; A Deep Dive</a></h3>
	<p>
		by Quasar Chunawala</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		The following code is the simplest implementation of a coroutine:</p>
	<pre>
  #include &lt;coroutine&gt;&#10;  void coro_func(){&#10;    co_return;&#10;  }&#10;  int main(){&#10;    coro_func();&#10;  }</pre>
	<p>
		Our first coroutine will just return nothing. It will not do anything else. Sadly, the preceding code is too simple for a functional coroutine and it will not compile. When compiling with gcc 15.2, we get the error shown in Figure 1.</p>
	<table style="width:945px;">
		<tbody>
			<tr>
				<td>
					<pre>
&lt;source&gt;: In function &#39;void coro_func()&#39;:&#10;&lt;source&gt;:4:5: error: unable to find the promise type for this coroutine&#10;    4 |     co_return;&#10;      |     ^~~~~~~~~</pre>
				</td>
			</tr>
			<tr>
				<td style="text-align: center;">
					<em>Figure 1</em></td>
			</tr>
		</tbody>
	</table>
	<p>
		Looking at C++ reference, we see that the return type of a coroutine must define a type named&nbsp;<code>promise_type</code>.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Tue, 30 Dec 2025 17:18:45 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Concurrency Flavours &#45;&#45; Lucian Radu Teodorescu</title>
      <link>https://isocpp.org//blog/2025/12/concurrency-flavours-lucian-radu-teodorescu</link>
      <guid>https://isocpp.org//blog/2025/12/concurrency-flavours-lucian-radu-teodorescu</guid>
      <description><![CDATA[<p>
	<img alt="logo.png" src="https://isocpp.org/files/img/logo.png" style="width: 225px; margin: 10px; float: right;" />Concurrency has many different approaches. Lucian Radu Teodorescu clarifies terms, showing how different approaches solve different problems.</p>
<blockquote>
	<h3>
		<a href="https://accu.org/journals/overload/33/190/teodorescu/">Concurrency Flavours</a></h3>
	<p>
		by Lucian Radu Teodorescu</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		Most engineers today use concurrency &ndash; often without a clear understanding of what it is, why it&rsquo;s needed, or which flavour they&rsquo;re dealing with. The vocabulary around concurrency is rich but muddled. Terms like parallelism, multithreading, asynchrony, reactive programming, and structured concurrency are regularly conflated &ndash; even in technical discussions.</p>
	<p>
		This confusion isn&rsquo;t just semantic &ndash; it leads to real-world consequences. If the goal behind using concurrency is unclear, the result is often poor concurrency &ndash; brittle code, wasted resources, or systems that are needlessly hard to reason about. Choosing the right concurrency strategy requires more than knowing a framework or following a pattern &ndash; it requires understanding what kind of complexity you&rsquo;re introducing, and why.</p>
	<p>
		To help clarify this complexity, the article aims to map out some of the main flavours of concurrency. Rather than defining terms rigidly, we&rsquo;ll explore the motivations behind them &ndash; and the distinct mindsets they evoke. While this article includes a few C++ code examples (using features to be added in C++26), its focus is conceptual &ndash; distinguishing between the flavours of concurrency. Our goal is to refine the reader&rsquo;s taste for concurrency.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Fri, 26 Dec 2025 17:15:02 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Finding the Next Code Point in Unicode Strings &#45;&#45; Giovanni Dicanio</title>
      <link>https://isocpp.org//blog/2025/12/finding-the-next-code-point-in-unicode-strings-giovanni-dicanio</link>
      <guid>https://isocpp.org//blog/2025/12/finding-the-next-code-point-in-unicode-strings-giovanni-dicanio</guid>
      <description><![CDATA[<p>
	With ASCII, it&#39;s very simple to find the next character in a string: you can just increment an index (i++) or char pointer (pch++). But what happens when you have Unicode strings to process?</p>
<blockquote>
	<h3>
		<a href="https://giodicanio.com/2025/11/03/finding-the-next-unicode-code-point-in-strings-utf-8-vs-utf-16/">Finding the Next Unicode Code Point in Strings: UTF-8 vs. UTF-16</a></h3>
</blockquote>
<blockquote>
	<p>
		by Giovanni Dicanio</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		Both UTF-16 and UTF-8 are variable-length encodings. In particular, UTF-8 encodes each valid Unicode code point using one to four 8-bit byte units. On the other hand, UTF-16 is somewhat simpler: In fact, Unicode code points are encoded in UTF-16 using just one or two 16-bit code units.</p>
	<p>
		(...) The functions have the following prototypes:</p>
</blockquote>
<blockquote>
	<pre class="prettyprint lang-cpp">
// Returns the next Unicode code point and number of bytes consumed.&#10;// Throws std::out_of_range if index is out of bounds or string ends prematurely.&#10;// Throws std::invalid_argument on invalid UTF-8 sequence.&#10;[[nodiscard]] std::pair&lt;char32_t, size_t&gt; NextCodePointUtf8(&#10;    const std::string&amp; str,&#10;    size_t index&#10;);&#10;&#10;// Returns the next Unicode code point and the number of UTF-16 code units consumed.&#10;// Throws std::out_of_range if index is out of bounds or string ends prematurely.&#10;// Throws std::invalid_argument on invalid UTF-16 sequence.&#10;[[nodiscard]] std::pair&lt;char32_t, size_t&gt; NextCodePointUtf16(&#10;    const std::wstring&amp; input,&#10;    size_t index&#10;);</pre>
</blockquote>
<p>
	&nbsp;</p>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Wed, 24 Dec 2025 22:13:31 +0000</pubDate>
      <dc:creator>Giovanni Dicanio</dc:creator>
    </item>

    <item>
      <title>Hardening the C++ Standard Library at massive scale &#45;&#45; Dionne, Rebert, Shavrick, and Varlamov</title>
      <link>https://isocpp.org//blog/2025/12/hardening-the-cpp-standard-library-at-massive-scale-dionne-rebert-shavrick</link>
      <guid>https://isocpp.org//blog/2025/12/hardening-the-cpp-standard-library-at-massive-scale-dionne-rebert-shavrick</guid>
      <description><![CDATA[<p>
	<img alt="acmqueue_logo.gif" src="https://isocpp.org/files/img/acmqueue_logo.gif" style="width: 160px; margin: 10px; float: right;" />Memory-safety vulnerabilities remain one of the most persistent and costly risks in large-scale C++ systems, even in well-tested production code. This article explores how hardening the C++ Standard Library&mdash;specifically LLVM&rsquo;s libc++&mdash;can deliver meaningful security and reliability gains at massive scale with minimal performance overhead.</p>
<blockquote>
	<h3>
		<a href="https://queue.acm.org/detail.cfm?id=3773097">Practical Security in Production: Hardening the C++ Standard Library at massive scale</a></h3>
	<p>
		by Louis Dionne, Alex Rebert, Max Shavrick, and Konstantin Varlamov</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		Over the past few years there has been a lot of talk about memory-safety vulnerabilities, and rightly so&mdash;attackers continue to take advantage of them to achieve their objectives. Aside from security, memory unsafety can be the cause of reliability issues and is notoriously expensive to debug. Considering the billions of lines of C++ code in production today, we need to do what we can to make C++ measurably safer over the next few years with as low of an adoption barrier as possible.</p>
	<p>
		In 2019, Alex Gaynor, a security expert and one of the leading voices in memory safety, wrote a piece titled "<a href="https://alexgaynor.net/2019/apr/21/modern-c++-wont-save-us/">Modern C++ Won&#39;t Save Us</a>," where he gave examples of foundational types such as&nbsp;<code>std::optional</code>&nbsp;that were unsafe in the idiomatic use cases. What happens when these unsafe types are used beyond their contract? Well, you guessed it: undefined behavior. The&nbsp;<code>std::optional</code>&nbsp;type isn&#39;t the only one to behave like this. If you look at how this compares with modern languages, you can see that C++ is the outlier.</p>
	<p>
		So, what&#39;s to be done? Possibly one of the best places to start today is by improving our standard libraries. They provide the baseline "vocabulary types" for developers&mdash;<em>and if they&#39;re not safe</em>,<em>&nbsp;it will be tough to build safety around them</em>. The&nbsp;<code>std::optional</code>&nbsp;type is only one of many vocabulary types in the C++ Standard Library that aren&#39;t safe by default today. Given the current state, it seems mostly clear that the first step should be hardening our standard library, and in our case, this was LLVM&#39;s libc++.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Wed, 24 Dec 2025 17:12:04 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Qt acquires I.A.R.</title>
      <link>https://isocpp.org//blog/2025/12/qt-acquires-iar</link>
      <guid>https://isocpp.org//blog/2025/12/qt-acquires-iar</guid>
      <description><![CDATA[<blockquote>
	<h3>
		<a href="https://www.qt.io/stock/qt-completes-the-recommended-public-cash-offer-to-the-shareholders-of-iar-systems-group-1760351460000-3668995">Qt completes the recommended public cash offer to the shareholders of I.A.R. Systems Group</a></h3>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		On 4 July 2025, Qt Group Plc&#39;s ("Qt Group") wholly owned subsidiary The Qt Company Ltd ("The Qt Company" and together with Qt Group, "Qt"), announced a recommended public cash offer to the shareholders of class B shares (the "Shares" or, individually, a "Share") in I.A.R. Systems Group AB (publ) ("IAR"), to tender all their Shares at a price of SEK 180 in cash per Share (the "Offer"). The Shares in IAR are traded on Nasdaq Stockholm, Mid Cap. An offer document relating to the Offer was published on 15 August 2025.</p>
	<p>
		At the end of the acceptance period on 10 October 2025, the Offer had been accepted by shareholders with a total of 12,037,848 Shares in IAR, corresponding to 94.49 per cent of the outstanding shares and votes in IAR.[1] As a result, The Qt Company controls in total 12,037,848 Shares in IAR, corresponding to 94.49 per cent of the outstanding shares and votes in IAR.[2]</p>
	<p>
		The Qt Company has decided to complete the Offer. All conditions are satisfied or have been waived. Settlement for Shares tendered in the Offer during the initial acceptance period will be initiated on or around 17 October 2025.</p>
	<p>
		&nbsp;</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Tue, 23 Dec 2025 22:09:02 +0000</pubDate>
      <dc:creator>Ville Voutilainen</dc:creator>
    </item>

    <item>
      <title>A little Introduction to Control Flow Integrity &#45; James McNellis &#45; Keynote Meeting C++ 2025</title>
      <link>https://isocpp.org//blog/2025/12/a-little-introduction-to-control-flow-integrity-james-mcnellis-keynote-meet</link>
      <guid>https://isocpp.org//blog/2025/12/a-little-introduction-to-control-flow-integrity-james-mcnellis-keynote-meet</guid>
      <description><![CDATA[<p>
	Thanks to James McNellis to giving an introduction to this crutial technique for protecting C++ applications, which he has practical experience with.</p>
<blockquote>
	<p>
		<a href="https://www.youtube.com/watch?v=_eX7AVB4qzM">A little Introduction to Control Flow Integrity - James McNellis - Keynote Meeting C++ 2025</a></p>
	<p>
		by James McNellis</p>
</blockquote>
<p>
	Watch the video:</p>
<blockquote>
	<p>
		<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="315" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/_eX7AVB4qzM?si=bykXMpfJofpyvGef" title="YouTube video player" width="560"></iframe></p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Video & On-Demand, Events,]]></dc:subject>
      <pubDate>Tue, 23 Dec 2025 17:18:48 +0000</pubDate>
      <dc:creator>Meeting C++</dc:creator>
    </item>

    <item>
      <title>Event&#45;driven flows &#45;&#45; Andrzej Krzemieński</title>
      <link>https://isocpp.org//blog/2025/12/event-driven-flows-andrzej-krzemieski</link>
      <guid>https://isocpp.org//blog/2025/12/event-driven-flows-andrzej-krzemieski</guid>
      <description><![CDATA[<p>
	<img alt="2025-12-19_10-06-35.png" src="https://isocpp.org/files/img/2025-12-19_10-06-35.png" style="width: 400px; margin: 10px; float: right;" />This post is in response to two claims about coroutines: 1) Their reference function parameters may become dangling too easily, and 2) They are indistinguishable from regular functions from the declaration alone.</p>
<blockquote>
	<h3>
		<a href="https://akrzemi1.wordpress.com/2025/11/16/event-driven-flows/">Event-driven flows</a></h3>
	<p>
		by Andrzej Krzemie&#324;ski</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		A canonical example of an event-driven flow is the handling of signals in C. Signals will be risen at unpredictable points in time, so rather than actively checking for them, we define a callback and&nbsp;<em>associate</em>&nbsp;it with the indicated signal:<br />
		<br />
		<code>signal</code><code>(SIGINT, on_interrupt);</code></p>
	<div>
		<div style="clear:both;">
			&nbsp;</div>
	</div>
	<p>
		After having performed this association, we move on to doing other things. It is the&nbsp;<em>implementation</em>&nbsp;(system, or parts of the program we do not write) that will make sure to invoke the callback when the signal is risen (if at all). We can illustrate it with a diagram:</p>
	<p>
		<a href="https://akrzemi1.wordpress.com/wp-content/uploads/2025/11/event.png"><img alt="" data-attachment-id="10589" data-comments-opened="1" data-image-caption="" data-image-description="" data-image-meta="{" data-image-title="event" data-large-file="https://akrzemi1.wordpress.com/wp-content/uploads/2025/11/event.png?w=406" data-medium-file="https://akrzemi1.wordpress.com/wp-content/uploads/2025/11/event.png?w=300" data-orig-file="https://akrzemi1.wordpress.com/wp-content/uploads/2025/11/event.png" data-orig-size="406,285" data-permalink="https://akrzemi1.wordpress.com/2025/11/16/event-driven-flows/event/" height="211" sizes="(max-width: 300px) 100vw, 300px" src="https://akrzemi1.wordpress.com/wp-content/uploads/2025/11/event.png?w=300" srcset="https://akrzemi1.wordpress.com/wp-content/uploads/2025/11/event.png?w=300 300w, https://akrzemi1.wordpress.com/wp-content/uploads/2025/11/event.png?w=150 150w, https://akrzemi1.wordpress.com/wp-content/uploads/2025/11/event.png 406w" style="border:none;vertical-align:baseline;height:auto;" width="300" /></a></p>
</blockquote>
<p>
	&nbsp;</p>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Mon, 22 Dec 2025 17:07:36 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Converting Between Unicode UTF&#45;16 and UTF&#45;8 in Windows C++ Code &#45;&#45; Giovanni Dicanio</title>
      <link>https://isocpp.org//blog/2025/12/converting-between-unicode-utf-16-and-utf-8-in-windows-cpp-code-giovanni-di</link>
      <guid>https://isocpp.org//blog/2025/12/converting-between-unicode-utf-16-and-utf-8-in-windows-cpp-code-giovanni-di</guid>
      <description><![CDATA[<p>
	Very often the need arises in Windows C++ programming to convert text between Unicode UTF-16 (which historically has been the <em>native</em> Unicode encoding used by Windows APIs) and UTF-8 (which is the <em>de facto</em> standard for sending text across the Internet and exchanging text between different platforms).</p>
<blockquote>
	<h3>
		<a href="https://giodicanio.com/2025/10/27/converting-between-unicode-utf-16-and-utf-8-in-windows-c-plus-plus-code/">Converting Between Unicode UTF-16 and UTF-8 in Windows C++ Code</a></h3>
</blockquote>
<blockquote>
	<p>
		by Giovanni Dicanio</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		A detailed discussion on how to convert C++ strings between Unicode UTF-16 and UTF-8 in C++ code using Windows APIs like WideCharToMultiByte, and STL strings and string views.</p>
	<p>
		&nbsp;</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Fri, 19 Dec 2025 22:13:42 +0000</pubDate>
      <dc:creator>Giovanni Dicanio</dc:creator>
    </item>

    <item>
      <title>Software and Safety &#45; Anthony Williams &#45; Keynote Meeting C++ 2025</title>
      <link>https://isocpp.org//blog/2025/12/software-and-safety-anthony-williams-keynote-meeting-cpp-2025</link>
      <guid>https://isocpp.org//blog/2025/12/software-and-safety-anthony-williams-keynote-meeting-cpp-2025</guid>
      <description><![CDATA[<p>
	The Opening Keynote by Anthony Williams from Meeting C++ 2025 has been released.</p>
<blockquote>
	<p>
		<a href="https://www.youtube.com/watch?v=wKGkOmpUTH8">Software and Safety - Anthony Williams - Keynote Meeting C++ 2025</a></p>
	<p>
		by Anthony Williams</p>
</blockquote>
<p>
	Watch now:</p>
<blockquote>
	<p>
		<iframe width="560" height="315" src="https://www.youtube.com/embed/wKGkOmpUTH8?si=OCi3JIQGXema_m7y" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>&nbsp;</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Video & On-Demand,]]></dc:subject>
      <pubDate>Fri, 19 Dec 2025 19:25:29 +0000</pubDate>
      <dc:creator>Meeting C++</dc:creator>
    </item>

    <item>
      <title>C++ Standard Evolution Viewer &#45;&#45; Jason Turner</title>
      <link>https://isocpp.org//blog/2025/12/cpp-standard-evolution-viewer-jason-turner</link>
      <guid>https://isocpp.org//blog/2025/12/cpp-standard-evolution-viewer-jason-turner</guid>
      <description><![CDATA[<p>
	E<img alt="Depositphotos_193487310_L.jpg" src="https://isocpp.org/files/img/Depositphotos_193487310_L.jpg" style="width: 200px; margin: 10px; float: right; height: 211px;" />xplore how the C++ standard evolved across versions with interactive side-by-side diffs</p>
<blockquote>
	<h3>
		<a href="https://cppevo.dev/">C++ Standard Evolution Viewer</a></h3>
	<p>
		by Jason Turner</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		This site provides an interactive way to explore changes in the C++ standard by viewing side-by-side diffs of individual sections (identified by stable names like&nbsp;<code>[array]</code>,&nbsp;<code>[class.copy]</code>,&nbsp;<code>[ranges.adaptors]</code>).</p>
	<p>
		Each version transition below focuses on&nbsp;<strong>Tier 1 sections</strong>&nbsp;(major library components and language features) to provide the most educational value.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Fri, 19 Dec 2025 13:59:37 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>2025&#45;12 Mailing Available</title>
      <link>https://isocpp.org//blog/2025/12/2025-12-mailing-available</link>
      <guid>https://isocpp.org//blog/2025/12/2025-12-mailing-available</guid>
      <description><![CDATA[<p>
	The 2025-12 mailing of new standards papers is now available.</p>
<p>
	&nbsp;</p>
<table border="1" summary="See previous paragraph.">
	<thead>
		<tr>
			<th>
				WG21 Number</th>
			<th>
				Title</th>
			<th>
				Author</th>
			<th>
				Document Date</th>
			<th>
				Mailing Date</th>
			<th>
				Previous Version</th>
			<th>
				Subgroup</th>
			<!--            <th>Disposition</th> -->
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				<a href="https://wg21.link/N5011">N5011</a></td>
			<td>
				Brno 2026</td>
			<td>
				Hana Dus&iacute;kov&aacute;</td>
			<td>
				2025-10-21</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				All of WG21</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/N5029">N5029</a></td>
			<td>
				WG21 2025-10 Kona Admin telecon minutes</td>
			<td>
				Nina Ranns</td>
			<td>
				2025-10-27</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				All of WG21</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/N5031">N5031</a></td>
			<td>
				WG21 2025-11 Kona Minutes of Meeting</td>
			<td>
				Nina Ranns</td>
			<td>
				2025-11-28</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				All of WG21</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/N5032">N5032</a></td>
			<td>
				Working Draft, Standard for Programming Language C++</td>
			<td>
				Thomas K&ouml;ppe</td>
			<td>
				2025-12-15</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				All of WG21</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/N5033">N5033</a></td>
			<td>
				Editors&#39; Report - Programming Languages - C++</td>
			<td>
				Thomas K&ouml;ppe</td>
			<td>
				2025-12-15</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				All of WG21</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P1317R2">P1317R2</a></td>
			<td>
				Remove return type deduction in std::apply</td>
			<td>
				Aaryaman Sagar</td>
			<td>
				2025-11-13</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P1317R1">P1317R1</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P1789R2">P1789R2</a></td>
			<td>
				Library Support for Expansion Statements</td>
			<td>
				Alisdair Meredith</td>
			<td>
				2025-11-05</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P1789R1">P1789R1</a></td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P1789R3">P1789R3</a></td>
			<td>
				Library Support for Expansion Statements</td>
			<td>
				Alisdair Meredith</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P1789R2">P1789R2</a></td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P2243R0">P2243R0</a></td>
			<td>
				Language linkage for templates</td>
			<td>
				S. Davis Herring</td>
			<td>
				2025-10-08</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P2728R10">P2728R10</a></td>
			<td>
				Unicode in the Library, Part 1: UTF Transcoding</td>
			<td>
				Eddie Nolan</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P2728R9">P2728R9</a></td>
			<td>
				SG9 Ranges,SG16 Unicode,LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P2728R9">P2728R9</a></td>
			<td>
				Unicode in the Library, Part 1: UTF Transcoding</td>
			<td>
				Eddie Nolan</td>
			<td>
				2025-11-06</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P2728R8">P2728R8</a></td>
			<td>
				SG9 Ranges,SG16 Unicode,LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3064R3">P3064R3</a></td>
			<td>
				How to Avoid OOTA Without Really Trying (Informational)</td>
			<td>
				Paul E. McKenney</td>
			<td>
				2025-11-15</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3064R2">P3064R2</a></td>
			<td>
				SG1 Concurrency and Parallelism</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3097R1">P3097R1</a></td>
			<td>
				Contracts for C++: Virtual functions</td>
			<td>
				Timur Doumler</td>
			<td>
				2025-12-13</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3097R0">P3097R0</a></td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3099R1">P3099R1</a></td>
			<td>
				Contracts for C++: User-defined diagnostic messages</td>
			<td>
				Timur Doumler</td>
			<td>
				2025-10-19</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3099R0">P3099R0</a></td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3100R5">P3100R5</a></td>
			<td>
				Implicit contract assertions</td>
			<td>
				Timur Doumler</td>
			<td>
				2025-12-15</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3100R4">P3100R4</a></td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3216R2">P3216R2</a></td>
			<td>
				views::slice</td>
			<td>
				Hewill Kang</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3216R1">P3216R1</a></td>
			<td>
				SG9 Ranges,LEWG Library Evolution,LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3220R2">P3220R2</a></td>
			<td>
				views::take_before</td>
			<td>
				Hewill Kang</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3220R1">P3220R1</a></td>
			<td>
				SG9 Ranges,LEWG Library Evolution,LWG Library,Direction Group</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3371R5">P3371R5</a></td>
			<td>
				Fix C++26 by making the rank-1, rank-2, rank-k, and rank-2k updates consistent with the BLAS</td>
			<td>
				Mark Hoemmen</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3371R4">P3371R4</a></td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3388R3">P3388R3</a></td>
			<td>
				When Do You Know connect Doesn&#39;t Throw?</td>
			<td>
				Robert Leahy</td>
			<td>
				2025-11-05</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3388R2">P3388R2</a></td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3391R2">P3391R2</a></td>
			<td>
				constexpr std::format</td>
			<td>
				Barry Revzin</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3391R1">P3391R1</a></td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3395R5">P3395R5</a></td>
			<td>
				Fix encoding issues and add a formatter for std::error_code</td>
			<td>
				Victor Zverovich</td>
			<td>
				2025-10-19</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3395R4">P3395R4</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3400R2">P3400R2</a></td>
			<td>
				Controlling Contract-Assertion Properties</td>
			<td>
				Joshua Berne</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3400R1">P3400R1</a></td>
			<td>
				SG21 Contracts,EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3412R3">P3412R3</a></td>
			<td>
				String Interpolation</td>
			<td>
				Bengt Gustafsson</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3412R2">P3412R2</a></td>
			<td>
				SG16 Unicode,EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>

		<tr>
			<td>
				<a href="https://wg21.link/P3424R1">P3424R1</a></td>
			<td>
				Define Delete With Throwing Exception Specification</td>
			<td>
				Alisdair Meredith</td>
			<td>
				2025-10-26</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3424R0">P3424R0</a></td>
			<td>
				CWG Core</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3505R2">P3505R2</a></td>
			<td>
				Fix the default floating-point representation in std::format</td>
			<td>
				Victor Zverovich</td>
			<td>
				2025-10-07</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3505R1">P3505R1</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3505R3">P3505R3</a></td>
			<td>
				Fix the default floating-point representation in std::format</td>
			<td>
				Victor Zverovich</td>
			<td>
				2025-10-08</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3505R2">P3505R2</a></td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3612R1">P3612R1</a></td>
			<td>
				Harmonize proxy-reference operations (LWG 3638 and 4187)</td>
			<td>
				Arthur O&#39;Dwyer</td>
			<td>
				2025-11-06</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3612R0">P3612R0</a></td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3642R3">P3642R3</a></td>
			<td>
				Carry-less product: std::clmul</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-11-14</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3642R2">P3642R2</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3657R1">P3657R1</a></td>
			<td>
				A Grammar for Whitespace Characters</td>
			<td>
				Alisdair Meredith</td>
			<td>
				2025-10-20</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3657R0">P3657R0</a></td>
			<td>
				CWG Core</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3657R2">P3657R2</a></td>
			<td>
				A Grammar for Whitespace Characters</td>
			<td>
				Alisdair Meredith</td>
			<td>
				2025-11-05</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3657R1">P3657R1</a></td>
			<td>
				CWG Core</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3666R2">P3666R2</a></td>
			<td>
				Bit-precise integers</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-12-13</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3666R1">P3666R1</a></td>
			<td>
				EWG Evolution,LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3684R1">P3684R1</a></td>
			<td>
				Fix erroneous behaviour termination semantics for C++26</td>
			<td>
				Timur Doumler</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3684R0">P3684R0</a></td>
			<td>
				EWG Evolution,CWG Core</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3688R5">P3688R5</a></td>
			<td>
				ASCII character utilities</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-12-13</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3688R4">P3688R4</a></td>
			<td>
				SG16 Unicode</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3692R3">P3692R3</a></td>
			<td>
				How to Avoid OOTA Without Really Trying</td>
			<td>
				Paul E. McKenney</td>
			<td>
				2025-11-13</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3692R2">P3692R2</a></td>
			<td>
				SG1 Concurrency and Parallelism,EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3695R3">P3695R3</a></td>
			<td>
				Deprecate implicit conversions between char8_t and char16_t or char32_t</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-11-20</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3695R2">P3695R2</a></td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3724R2">P3724R2</a></td>
			<td>
				Integer division</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-12-13</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3724R1">P3724R1</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3726R1">P3726R1</a></td>
			<td>
				Adjustments to Union Lifetime Rules</td>
			<td>
				Barry Revzin</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3726R0">P3726R0</a></td>
			<td>
				EWG Evolution,LEWG Library Evolution,CWG Core</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3735R1">P3735R1</a></td>
			<td>
				partial_sort_at_most, nth_element_at_most</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-11-17</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3735R0">P3735R0</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3737R2">P3737R2</a></td>
			<td>
				std::array is a wrapper for an array!</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-11-20</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3737R1">P3737R1</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3739R4">P3739R4</a></td>
			<td>
				Standard Library Hardening - using std::optional</td>
			<td>
				Jarrad J Waterloo</td>
			<td>
				2025-11-06</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3739R3">P3739R3</a></td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3744R0">P3744R0</a></td>
			<td>
				Explicit Provenance APIs</td>
			<td>
				Gonzalo Brito Gadeschi</td>
			<td>
				2025-12-02</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG1 Concurrency and Parallelism</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3751R0">P3751R0</a></td>
			<td>
				A gentle introduction to pointer authentication</td>
			<td>
				Oliver Hunt</td>
			<td>
				2025-11-04</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG23 Safety and Security</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3751R1">P3751R1</a></td>
			<td>
				A gentle introduction to pointer authentication</td>
			<td>
				Oliver Hunt</td>
			<td>
				2025-11-04</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3751R0">P3751R0</a></td>
			<td>
				SG23 Safety and Security</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3763R1">P3763R1</a></td>
			<td>
				Remove redundant reserve_hint members from view classes</td>
			<td>
				Hewill Kang</td>
			<td>
				2025-11-04</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3763R0">P3763R0</a></td>
			<td>
				SG9 Ranges,LEWG Library Evolution,LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3772R1">P3772R1</a></td>
			<td>
				std::simd overloads for bit permutations</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-11-13</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3772R0">P3772R0</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3793R1">P3793R1</a></td>
			<td>
				Better shifting</td>
			<td>
				Brian Bi</td>
			<td>
				2025-11-19</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3793R0">P3793R0</a></td>
			<td>
				SG6 Numerics</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3804R1">P3804R1</a></td>
			<td>
				Iterating on parallel_scheduler</td>
			<td>
				Lucian Radu Teodorescu</td>
			<td>
				2025-12-15</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3804R0">P3804R0</a></td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3815R1">P3815R1</a></td>
			<td>
				Add scope_association concept to P3149</td>
			<td>
				Jessica Wong</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3815R0">P3815R0</a></td>
			<td>
				All of WG21</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3816R1">P3816R1</a></td>
			<td>
				Hashing meta::info</td>
			<td>
				Matt Cummins</td>
			<td>
				2025-12-15</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3816R0">P3816R0</a></td>
			<td>
				SG7 Reflection</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3824R2">P3824R2</a></td>
			<td>
				Static storage for braced initializers NBC examples</td>
			<td>
				Jarrad J Waterloo</td>
			<td>
				2025-11-01</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3824R1">P3824R1</a></td>
			<td>
				SG23 Safety and Security,CWG Core</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3826R1">P3826R1</a></td>
			<td>
				Fix or Remove Sender Algorithm Customization</td>
			<td>
				Eric Niebler</td>
			<td>
				2025-11-03</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3826R0">P3826R0</a></td>
			<td>
				SG1 Concurrency and Parallelism,LEWG Library Evolution,LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3826R2">P3826R2</a></td>
			<td>
				Fix or Remove Sender Algorithm Customization</td>
			<td>
				Eric Niebler</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3826R1">P3826R1</a></td>
			<td>
				SG1 Concurrency and Parallelism,LEWG Library Evolution,LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3833R0">P3833R0</a></td>
			<td>
				std::unique_multilock</td>
			<td>
				Ted Lyngmo</td>
			<td>
				2025-12-09</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG1 Concurrency and Parallelism,LEWGI SG18: LEWG Incubator</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3834R2">P3834R2</a></td>
			<td>
				Defaulting the Compound Assignment Operators</td>
			<td>
				Matthew Taylor</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3834R1">P3834R1</a></td>
			<td>
				EWGI SG17: EWG Incubator</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3836R2">P3836R2</a></td>
			<td>
				Make optional&lt;T&amp;&gt; trivially copyable (NB comment US 134-215)</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-11-05</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3836R1">P3836R1</a></td>
			<td>
				LEWG Library Evolution,LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3843R1">P3843R1</a></td>
			<td>
				Reconsider R0 of P3774 (Rename std::nontype) for C++26</td>
			<td>
				Jonathan M&uuml;ller</td>
			<td>
				2025-11-17</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3843R0">P3843R0</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3843R2">P3843R2</a></td>
			<td>
				std::function_wrapper</td>
			<td>
				Jonathan M&uuml;ller</td>
			<td>
				2025-11-17</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3843R1">P3843R1</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3844R1">P3844R1</a></td>
			<td>
				Restore simd::vec broadcast from int</td>
			<td>
				Matthias Kretz</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3844R0">P3844R0</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3844R2">P3844R2</a></td>
			<td>
				Restore simd::vec broadcast from int</td>
			<td>
				Matthias Kretz</td>
			<td>
				2025-11-19</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3844R1">P3844R1</a></td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3847R0">P3847R0</a></td>
			<td>
				Lambdas capture left to right</td>
			<td>
				S. Davis Herring</td>
			<td>
				2025-10-08</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3849R1">P3849R1</a></td>
			<td>
				SIS/TK611 considerations on Contract Assertions</td>
			<td>
				Harald Achitz</td>
			<td>
				2025-10-12</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3849R0">P3849R0</a></td>
			<td>
				SG21 Contracts</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3852R0">P3852R0</a></td>
			<td>
				a (constexpr) utility to check if pointer points between two related pointers</td>
			<td>
				Hana Dus&iacute;kov&aacute;</td>
			<td>
				2025-12-13</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution,LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3856R1">P3856R1</a></td>
			<td>
				New reflection metafunctions - is_structural_type (US NB comment 49) and is_destructurable_type</td>
			<td>
				Jagrut Dave</td>
			<td>
				2025-11-01</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3856R0">P3856R0</a></td>
			<td>
				SG7 Reflection,LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3856R2">P3856R2</a></td>
			<td>
				New reflection metafunctions - is_structural_type (US NB comment 49) and is_destructurable_type</td>
			<td>
				Jagrut Dave</td>
			<td>
				2025-11-01</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3856R1">P3856R1</a></td>
			<td>
				SG7 Reflection,LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3856R3">P3856R3</a></td>
			<td>
				New reflection metafunctions - is_structural_type (US NB comment 49) and is_destructurable_type</td>
			<td>
				Jagrut Dave</td>
			<td>
				2025-11-01</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3856R2">P3856R2</a></td>
			<td>
				SG7 Reflection,LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3858R1">P3858R1</a></td>
			<td>
				A Lifetime-Management Primitive for Trivially Relocatable Types</td>
			<td>
				David Sankel</td>
			<td>
				2025-11-03</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3858R0">P3858R0</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3860R1">P3860R1</a></td>
			<td>
				Proposed Resolution for NB Comment GB13-309 atomic_ref is not convertible to atomic_ref</td>
			<td>
				Hui Xie</td>
			<td>
				2025-11-04</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3860R0">P3860R0</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3868R1">P3868R1</a></td>
			<td>
				Allow #line before module declarations</td>
			<td>
				Michael Spencer</td>
			<td>
				2025-10-30</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3868R0">P3868R0</a></td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3869R0">P3869R0</a></td>
			<td>
				Slides for P3666R1 Bit-precise integers</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-10-26</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG22 Compatibility</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3869R1">P3869R1</a></td>
			<td>
				Slides for P3666R1 Bit-precise integers</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-11-02</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3869R0">P3869R0</a></td>
			<td>
				SG6 Numerics</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3876R0">P3876R0</a></td>
			<td>
				Extending &lt;charconv&gt; support to more character types</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-11-13</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG16 Unicode</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3878R0">P3878R0</a></td>
			<td>
				C++26 Contracts are not a good fit for standard library hardening</td>
			<td>
				Ville Voutilainen</td>
			<td>
				2025-10-23</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution,LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3878R1">P3878R1</a></td>
			<td>
				Standard library hardening should not use the &#39;observe&#39; semantic</td>
			<td>
				Ville Voutilainen</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3878R0">P3878R0</a></td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3880R0">P3880R0</a></td>
			<td>
				Make subspan aware of compile-time constants</td>
			<td>
				Hewill Kang</td>
			<td>
				2025-11-11</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3881R0">P3881R0</a></td>
			<td>
				Forward-progress for all infinite loops</td>
			<td>
				Simon Cooksey</td>
			<td>
				2025-11-06</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG1 Concurrency and Parallelism</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3883R0">P3883R0</a></td>
			<td>
				A Proposal for a Boolean Flip Operator in C++</td>
			<td>
				Muhammad Taaha</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWGI SG17: EWG Incubator</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3884R0">P3884R0</a></td>
			<td>
				Slides for P3505R2 Fix the default floating-point representation in std::format</td>
			<td>
				Victor Zverovich</td>
			<td>
				2025-10-19</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3885R0">P3885R0</a></td>
			<td>
				Add a formatter for std::error_category</td>
			<td>
				Victor Zverovich</td>
			<td>
				2025-10-19</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG16 Unicode</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3886R0">P3886R0</a></td>
			<td>
				Wording for AT1-057</td>
			<td>
				Michael Florian Hava</td>
			<td>
				2025-10-21</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3887R0">P3887R0</a></td>
			<td>
				Make when_all a Ronseal Algorithm</td>
			<td>
				Robert Leahy</td>
			<td>
				2025-10-21</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG1 Concurrency and Parallelism,LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3887R1">P3887R1</a></td>
			<td>
				Make when_all a Ronseal Algorithm</td>
			<td>
				Robert Leahy</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3887R0">P3887R0</a></td>
			<td>
				SG1 Concurrency and Parallelism,LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3889R0">P3889R0</a></td>
			<td>
				A minimal solution for contracts, or, what is an MVP?</td>
			<td>
				Harald Achitz</td>
			<td>
				2025-10-25</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3890R0">P3890R0</a></td>
			<td>
				Add description for parallel memory algorithms</td>
			<td>
				Ruslan Arutyunyan</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3891R0">P3891R0</a></td>
			<td>
				Improve readability of the C++ grammar by adding a syntax for groups and repetitions</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-11-22</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				CWG Core,LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3892R0">P3892R0</a></td>
			<td>
				unless_stop_requested</td>
			<td>
				Robert Leahy</td>
			<td>
				2025-10-27</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG1 Concurrency and Parallelism,LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3893R0">P3893R0</a></td>
			<td>
				The CppCon 2025 Talk on Contracts and CodeQL in Context</td>
			<td>
				Mike Fairhurst</td>
			<td>
				2025-10-24</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution,LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3895R0">P3895R0</a></td>
			<td>
				Slides for P3724R1 - Integer division</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-11-03</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG6 Numerics</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3896R0">P3896R0</a></td>
			<td>
				Design goals for a contract support facility</td>
			<td>
				Andrzej Krzemie&#324;ski</td>
			<td>
				2025-10-30</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3897R0">P3897R0</a></td>
			<td>
				Slides for P3776R1 - More trailing commas</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-10-31</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3898R0">P3898R0</a></td>
			<td>
				Slides for P3793R0 - Better shifting</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-11-02</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG6 Numerics</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3899R0">P3899R0</a></td>
			<td>
				Clarify the behavior of floating-point overflow</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-12-13</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG6 Numerics</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3902R0">P3902R0</a></td>
			<td>
				Against implicit conversions for indirect</td>
			<td>
				Jonathan Coe</td>
			<td>
				2025-10-31</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3902R1">P3902R1</a></td>
			<td>
				Against implicit conversions for indirect</td>
			<td>
				Jonathan Coe</td>
			<td>
				2025-11-06</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3902R0">P3902R0</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3902R2">P3902R2</a></td>
			<td>
				Against implicit conversions for indirect</td>
			<td>
				Jonathan Coe</td>
			<td>
				2025-11-06</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3902R1">P3902R1</a></td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3904R0">P3904R0</a></td>
			<td>
				When paths go WTF: making formatting lossless</td>
			<td>
				Victor Zverovich</td>
			<td>
				2025-11-05</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG16 Unicode</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3905R0">P3905R0</a></td>
			<td>
				C++ Standard Library Ready Issues to be moved in Kona, Nov. 2025</td>
			<td>
				Jonathan Wakely</td>
			<td>
				2025-10-30</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				All of WG21</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3906R0">P3906R0</a></td>
			<td>
				C++ Standard Library Immediate Issues to be moved in Kona, Nov. 2025</td>
			<td>
				Jonathan Wakely</td>
			<td>
				2025-11-28</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				All of WG21</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3907R0">P3907R0</a></td>
			<td>
				Waving more ::result_type goodbye</td>
			<td>
				Zhihao Yuan</td>
			<td>
				2025-11-03</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3908R0">P3908R0</a></td>
			<td>
				constexpr from_chars&lt;float&gt; / to_chars&lt;float&gt;</td>
			<td>
				Hana Dus&iacute;kov&aacute;</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3909R0">P3909R0</a></td>
			<td>
				Contracts should go into a White Paper - even at this late point</td>
			<td>
				Ville Voutilainen</td>
			<td>
				2025-11-02</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3910R0">P3910R0</a></td>
			<td>
				Improving safety of C++26 contracts</td>
			<td>
				Bengt Gustafsson</td>
			<td>
				2025-11-02</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG21 Contracts,EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3911R0">P3911R0</a></td>
			<td>
				RO 2-056 6.11.2 [basic.contract.eval] Make Contracts Reliably Non-Ignorable</td>
			<td>
				Darius Nea&#539;u</td>
			<td>
				2025-12-10</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG21 Contracts,EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3912R0">P3912R0</a></td>
			<td>
				Design considerations for always-enforced contract assertions</td>
			<td>
				Timur Doumler</td>
			<td>
				2025-12-15</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3913R0">P3913R0</a></td>
			<td>
				Optimize for std::optional in range adaptors</td>
			<td>
				Steve Downey</td>
			<td>
				2025-11-05</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution,LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3913R1">P3913R1</a></td>
			<td>
				Optimize for std::optional in range adaptors</td>
			<td>
				Steve Downey</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3913R0">P3913R0</a></td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3914R0">P3914R0</a></td>
			<td>
				Assorted NB comment resolutions for Kona 2025</td>
			<td>
				Tim Song</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3915R0">P3915R0</a></td>
			<td>
				Responses to Trivial Relocation NB Comments</td>
			<td>
				Pablo Halpern</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution,LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3917R0">P3917R0</a></td>
			<td>
				A Lifetime-Management Primitive for Trivially Relocatable Types (Presentation)</td>
			<td>
				David Sankel</td>
			<td>
				2025-11-05</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution,LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3919R0">P3919R0</a></td>
			<td>
				Guaranteed-(quick-)enforced contracts</td>
			<td>
				Ville Voutilainen</td>
			<td>
				2025-12-15</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3920R0">P3920R0</a></td>
			<td>
				Wording for NB comment resolution on trivial relocation</td>
			<td>
				Louis Dionne</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution,CWG Core,LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3921R0">P3921R0</a></td>
			<td>
				Core Language Working Group "ready" Issues for the November, 2025 meeting</td>
			<td>
				Jens Maurer</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				CWG Core</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3922R0">P3922R0</a></td>
			<td>
				Missing deduction guide from simd::mask to simd::vec</td>
			<td>
				Matthias Kretz</td>
			<td>
				2025-11-06</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution,LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3922R1">P3922R1</a></td>
			<td>
				Missing deduction guide from simd::mask to simd::vec</td>
			<td>
				Matthias Kretz</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				<a href="https://wg21.link/P3922R0">P3922R0</a></td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3923R0">P3923R0</a></td>
			<td>
				Additional NB comment resolutions for Kona 2025</td>
			<td>
				Tim Song</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3924R0">P3924R0</a></td>
			<td>
				Fix inappropriate font choices for "declaration"</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-12-13</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				CWG Core</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3925R0">P3925R0</a></td>
			<td>
				RO 3-292 29.10.8.3 [simd.comparison] Make `basic_simd` a Regular Type (with Boolean `operator==`)</td>
			<td>
				Darius Nea&#539;u</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3926R0">P3926R0</a></td>
			<td>
				Slides: operator T&amp; on indirect (in defense of US 77-140)</td>
			<td>
				Zhihao Yuan</td>
			<td>
				2025-11-07</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3928R0">P3928R0</a></td>
			<td>
				static_sized_range</td>
			<td>
				Hewill Kang</td>
			<td>
				2025-12-04</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG9 Ranges,LEWG Library Evolution,LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3929R0">P3929R0</a></td>
			<td>
				Fix safety hazard in std::function_ref</td>
			<td>
				Jonathan M&uuml;ller</td>
			<td>
				2025-11-17</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3931R0">P3931R0</a></td>
			<td>
				consteval all the non-allocating operator"" things</td>
			<td>
				Hana Dus&iacute;kov&aacute;</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3933R0">P3933R0</a></td>
			<td>
				constexpr std::hive</td>
			<td>
				Hana Dus&iacute;kov&aacute;</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3935R0">P3935R0</a></td>
			<td>
				Rebasing &lt;cmath&gt; on C23</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-12-13</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG6 Numerics,SG22 Compatibility</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3936R0">P3936R0</a></td>
			<td>
				Safer atomic_ref::address (FR-030-310)</td>
			<td>
				Corentin Jabot</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3937R0">P3937R0</a></td>
			<td>
				Type Erasure Requirements For Future Trivial Relocation Design</td>
			<td>
				Mingxin Wang</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3938R0">P3938R0</a></td>
			<td>
				Values of floating-point types</td>
			<td>
				Jan Schultke</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG6 Numerics</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3940R0">P3940R0</a></td>
			<td>
				Rename concept tags for C++26: sender_t to sender_tag</td>
			<td>
				Arthur O&#39;Dwyer</td>
			<td>
				2025-12-09</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3941R0">P3941R0</a></td>
			<td>
				Scheduler Affinity</td>
			<td>
				Dietmar K&uuml;hl</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				SG1 Concurrency and Parallelism,LEWG Library Evolution,LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3945R0">P3945R0</a></td>
			<td>
				Comments on D3933R0 (constexpr hive)</td>
			<td>
				Matt Bentley</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution,LWG Library</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3946R0">P3946R0</a></td>
			<td>
				Designing enforced assertions</td>
			<td>
				Andrzej Krzemie&#324;ski</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3947R0">P3947R0</a></td>
			<td>
				identifier_of Should Return std::string</td>
			<td>
				Eddie Nolan</td>
			<td>
				2025-12-14</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				EWG Evolution,LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
		<tr>
			<td>
				<a href="https://wg21.link/P3948R0">P3948R0</a></td>
			<td>
				constant_wrapper is the only tool needed for passing constant expressions</td>
			<td>
				Matthias Kretz</td>
			<td>
				2025-12-15</td>
			<td>
				2025-12</td>
			<td>
				&nbsp;</td>
			<td>
				LEWG Library Evolution</td>
			<!--		<td></td>  -->
		</tr>
	</tbody>
</table>]]></description>
      <dc:subject><![CDATA[News, Standardization,]]></dc:subject>
      <pubDate>Tue, 16 Dec 2025 17:47:25 +0000</pubDate>
      <dc:creator>Administrator</dc:creator>
    </item>

    <item>
      <title>Structured iteration &#45;&#45; Andrzej Krzemieński</title>
      <link>https://isocpp.org//blog/2025/12/structured-iteration</link>
      <guid>https://isocpp.org//blog/2025/12/structured-iteration</guid>
      <description><![CDATA[<p>
	It is relatively easy to get your <code>for</code>-loops wrong. Luckily, C++ offers more and more bug-proof alternatives.</p>
<blockquote>
	<h3>
		<a href="https://thecppway.com/posts/structured_iteration/">Structured iteration</a></h3>
</blockquote>
<blockquote>
	<p>
		by Andrzej Krzemie&#324;ski</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		These problems do not occur when you use the range-based for-loop.</p>
	<p>
		This C++11 addition, apart from other conveniences, is a safety feature (as in language-safety): it is very hard to use it incorrectly. It is not flexible, or versatile. You have to pass it a range, you have to give a name to an element referenced in each iteration step. There is no "control variable" (like i), so you cannot get the operations on it wrong. A number of bugs are prevented simply by employing a range-based loop.</p>
	<p>
		But what if my iteration is more complicated? What if I need to visit my elements in reverse?</p>
	<p>
		&nbsp;</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Mon, 15 Dec 2025 22:45:11 +0000</pubDate>
      <dc:creator>Andrzej Krzemienski</dc:creator>
    </item>

    <item>
      <title>Meeting C++ 24h++ is next week!</title>
      <link>https://isocpp.org//blog/2025/12/meeting-cpp-24h-is-next-week</link>
      <guid>https://isocpp.org//blog/2025/12/meeting-cpp-24h-is-next-week</guid>
      <description><![CDATA[<p>
	Meeting C++ is hosting a 24h++ Event on December 18th and 19th! <a href="http://Meeting C++ 24h++ starts at the 18. December 2025.  Meeting C++ hosts an 24h++ online event with a mix of live content and prerecorded talks from Meeting C++ 2025. With the 24h+ of the event, you should be able to attend some of the talks during the event plus you get access to all talks in the event to view after the event.  This online conference is also a fundraiser for Meeting C++, as the conference is not covering the costs to run Meeting C++ as a platform in 2026. Meeting C++ will happen as a conference in 2026 on November 26, but otherwise I'll have to focus on working on my own content and doing paid work then running Meeting C++ as a service to the community like in the last decade. You also can support Meeting C++ by getting your own Meeting C++ 2026 calendar now, or visit the merchandise shop!">Get your tickets now</a>!</p>
<blockquote>
	<h2>
		<a href="https://meetingcpp.com/mcpp/online/conference.php">Meeting C++ 24h++</a></h2>
	<p>
		by Jens Weller</p>
	<p>
		From the page:</p>
	<p>
		Meeting C++ 24h++ starts at the 18. December 2025.</p>
	<p>
		Meeting C++ hosts an 24h++ online event with a mix of live content and prerecorded talks from Meeting C++ 2025. With the 24h+ of the event, you should be able to attend some of the talks during the event plus you get access to all talks in the event to view after the event!</p>
	<p>
		&nbsp;</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Events,]]></dc:subject>
      <pubDate>Thu, 11 Dec 2025 15:03:42 +0000</pubDate>
      <dc:creator>Meeting C++</dc:creator>
    </item>

    <item>
      <title>CLion 2025.3 Is Here, and It’s Epic: Constexpr Debugger, and More &#45;&#45; Oleg Zinovyev</title>
      <link>https://isocpp.org//blog/2025/12/clion-2025.3-is-here-and-its-epic-constexpr-debugger-and-more-oleg-zinovyev</link>
      <guid>https://isocpp.org//blog/2025/12/clion-2025.3-is-here-and-its-epic-constexpr-debugger-and-more-oleg-zinovyev</guid>
      <description><![CDATA[<p>
	CLion 2025.3 is here, a landmark release with a groundbreaking Constexpr Debugger...</p>
<blockquote>
	<h3>
		<a href="https://blog.jetbrains.com/clion/2025/12/2025-3-release/">CLion 2025.3 Is Here, and It&rsquo;s Epic: F<img alt="Screenshot_2025-12-09_170708.png" src="https://isocpp.org/files/img/Screenshot_2025-12-09_170708.png" style="width: 400px; margin: 10px; float: right;" />aster Language Engine, Unique Constexpr Debugger, DAP Support, and Much More</a></h3>
	<p>
		by Oleg Zinovyev</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		CLion 2025.3 represents one of our most ambitious releases yet. Beyond the extensive feature additions and workflow improvements, this version marks a fundamental shift in how we approach C and C++ language support &ndash; prioritizing speed and precision at every level.</p>
	<p>
		The key release updates are as follows:</p>
	Faster performance with the CLion Nova language engine as the default.</blockquote>
<blockquote>
	Deeper insight into compile-time evaluations with the unique Constexpr Debugger.</blockquote>
<blockquote>
	Expanded debugger options with support for the Debug Adapter Protocol.</blockquote>
<blockquote>
	[...]</blockquote>]]></description>
      <dc:subject><![CDATA[News, Product News,]]></dc:subject>
      <pubDate>Wed, 10 Dec 2025 01:02:13 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Trip report: Meeting C++ 2025 &#45;&#45; Sandor Dargo</title>
      <link>https://isocpp.org//blog/2025/12/trip-report-meeting-cpp-2025-sandor-dargo</link>
      <guid>https://isocpp.org//blog/2025/12/trip-report-meeting-cpp-2025-sandor-dargo</guid>
      <description><![CDATA[<p>
	<img alt="cippi-me-meeting-cpp2025.JPG" src="https://isocpp.org/files/img/cippi-me-meeting-cpp2025.JPG" style="width: 300px; margin: 10px; float: right; height: 400px;" />What a year I had! One more conference, one more trip report! I had the chance to go to Meeting C++ and give not just one but two talks!</p>
<blockquote>
	<h3>
		<a href="https://www.sandordargo.com/blog/2025/11/12/trip-report-meeting-cpp-2025">Trip report: Meeting C++ 2025</a></h3>
	<p>
		by Sandor Dargo</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		I remember that last year I said that Berlin in November is the perfect place to have a conference because you want to be inside that four-star hotel and not outside. This year, the conference was held a week earlier, and the weather was so nice that it was actually tempting to go out and explore.</p>
	<p>
		But people resisted the temptation. The lineup and content were very strong &mdash; this year there were more than 50 talks across 5 different tracks. Also, Meeting C++ is a fully hybrid conference, so you can join any talk online as well.</p>
	<p>
		It might sound funny, but I must mention that the food is just great at Meeting C++. It&rsquo;s probably the conference with the best catering I&rsquo;ve ever been to &mdash; from lunch to coffee breaks, everything was top-notch.</p>
	<p>
		This year, there were no evening programs. I&rsquo;m not complaining; it&rsquo;s both a pity and a blessing, and I&rsquo;m not sure how I feel about it. For example, when I first attended C++ On Sea, there were no evening events, and I really enjoyed discovering Folkestone in the evenings. Over the years, the schedule there got extended, and sometimes I had no time to visit my favorite places. But at least some socializing was guaranteed. One can say that you can do it on your own, but many of us are introverted, and if we&rsquo;re not forced to socialize, we just won&rsquo;t. That&rsquo;s even easier to avoid in a big city like Berlin. I remember that last year I didn&rsquo;t have time to go out until the end of the conference. It was different this year.</p>
	<p>
		But let&rsquo;s talk about the talks.</p>
	<p>
		<strong>My three favourite talks</strong><br />
		<br />
		Let me share with you the three talks I liked the most. They are listed in chronological order...</p>
</blockquote>
<p>
	&nbsp;</p>]]></description>
      <dc:subject><![CDATA[News, Articles & Books, Events,]]></dc:subject>
      <pubDate>Tue, 09 Dec 2025 22:37:00 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>C++ Enum Class and Error Codes &#45;&#45;  Mathieu Ropert</title>
      <link>https://isocpp.org//blog/2025/12/cpp-enum-class-and-error-codes-mathieu-ropert</link>
      <guid>https://isocpp.org//blog/2025/12/cpp-enum-class-and-error-codes-mathieu-ropert</guid>
      <description><![CDATA[<p>
	<img alt="Me.jpg" src="https://isocpp.org/files/img/Me.jpg" style="width: 200px; margin: 10px; float: right; height: 200px;" />C++11 gave us&nbsp;<code>enum class</code>&nbsp;and while it&rsquo;s great to have scoped enums I don&rsquo;t find it great for error handling. Let&rsquo;s talk about why.</p>
<blockquote>
	<h3>
		<a href="https://mropert.github.io/2025/11/11/enum_class_error_codes/">C++ Enum Class and Error Codes</a></h3>
	<p>
		by Mathieu Ropert</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		Most of my readers, I hope, have been able to use C++11 for a while now (if not hello, I&rsquo;m sorry the world has changed to become this weird during your 14 years sleep). With it came a small change that allowed for better scoping of names without resorting to weird quirks:&nbsp;<code>enum class</code>. The idea is simple: owing to C,&nbsp;<code>enum</code>&nbsp;values in C++ belong to the class or namespace they are declared in but if we add the&nbsp;<code>class</code>&nbsp;keyword to the declaration they know become their own scope instead of leaking to their parent.</p>
	<p>
		This was a simple quality of life change in the compiler to address a weakness in the language that folks usually worked around by either adding long prefix to the enum values (C style) or wrapping them within structs or classes (C++98/03 style). And with it came the incentive to migrate C era error code enums to scoped enums. But there&rsquo;s a catch.</p>
</blockquote>
<p>
	&nbsp;</p>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Fri, 05 Dec 2025 22:34:37 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Trip report: Budapest C++ &#45; Breaking &amp;amp; Building C++ &#45;&#45; Sandor Dargo</title>
      <link>https://isocpp.org//blog/2025/12/trip-report-budapest-cpp-breaking-building-c-sandor-dargo</link>
      <guid>https://isocpp.org//blog/2025/12/trip-report-budapest-cpp-breaking-building-c-sandor-dargo</guid>
      <description><![CDATA[<p>
	<img alt="c++meetup_1022.jpeg" src="https://isocpp.org/files/img/c++meetup_1022.jpeg" style="width: 400px; margin: 10px; float: right;" />The Budapest C++ Meetup was a great reminder of how strong and curious our local community is. Each talk approached the language from a different angle &mdash; Jonathan M&uuml;ller from the perspective of performance, mine from design and type safety, and Marcell Juh&aacute;sz from security &mdash; yet all shared the same core message: understand what C++ gives you and use it wisely.</p>
<blockquote>
	<h3>
		<a href="https://www.sandordargo.com/blog/2025/10/22/trip-report-budapest-cpp">Trip report: Budapest C++ - Breaking &amp; Building C++</a></h3>
	<p>
		by Sandor Dargo</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		More than a hundred people registered, and the room quickly filled up with local developers eager to hear three technical talks. The atmosphere was lively and welcoming &mdash; it showed the strength of the C++ community in Budapest. In 2027, even WG21 might come to Hungary!</p>
	<p>
		The evening began with Jonathan M&uuml;ller&rsquo;s talk, Cache-Friendly C++, followed by my own session on Strongly Typed Containers. Finally, Marcell Juh&aacute;sz closed the event with an insightful and hands-on presentation on Hacking and Securing C++.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books, Events,]]></dc:subject>
      <pubDate>Wed, 03 Dec 2025 22:31:10 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Speeding up C++ functions with a thread_local cache &#45;&#45; Daniel Lemire</title>
      <link>https://isocpp.org//blog/2025/12/speeding-up-cpp-functions-with-a-thread-local-cache-daniel-lemire</link>
      <guid>https://isocpp.org//blog/2025/12/speeding-up-cpp-functions-with-a-thread-local-cache-daniel-lemire</guid>
      <description><![CDATA[<p>
	<img alt="9af1530f-1aca-4fbc-8796-ff74a1a8b544-784x510.jpg" src="https://isocpp.org/files/img/9af1530f-1aca-4fbc-8796-ff74a1a8b544-784x510.jpg" style="width: 300px; margin: 10px; float: right; height: 195px;" />When working with legacy or rigid codebases, performance bottlenecks can emerge from designs you can&rsquo;t easily change&mdash;like interfaces that force inefficient map access by index. This article explores how a simple <strong data-end="236" data-start="212"><code data-end="228" data-is-only-node="" data-start="214">thread_local</code> cache</strong> can dramatically improve performance in such cases, reducing repeated lookups from quadratic to near-constant time.</p>
<blockquote>
	<h3>
		<a href="https://lemire.me/blog/2025/10/19/speeding-up-c-functions-with-a-thread_local-cache/">Speeding up C++ functions with a thread_local cache</a></h3>
	<p>
		by Daniel Lemire</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		In large code bases, we are often stuck with unpleasant designs that are harming our performance. We might be looking for a non-intrusive method to improve the performance. For example, you may not want to change the function signatures.</p>
	<p>
		Let us consider a concrete example. Maybe someone designed the programming interface so that you have to access the values from a map using an index.&nbsp;</p>
	<p>
		&nbsp;</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Mon, 01 Dec 2025 22:26:49 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>Using RAII to remedy defect where not all code paths performed required exit actions &#45;&#45; Raymond Chen</title>
      <link>https://isocpp.org//blog/2025/11/using-raii-to-remedy-defect-where-not-all-code-paths-performed-required-exi</link>
      <guid>https://isocpp.org//blog/2025/11/using-raii-to-remedy-defect-where-not-all-code-paths-performed-required-exi</guid>
      <description><![CDATA[<p>
	<img alt="RaymondChen_5in-150x150.jpg" src="https://isocpp.org/files/img/RaymondChen_5in-150x150.jpg" style="width: 150px; margin: 10px; float: right;" />A missing <code data-end="23" data-start="10">DismissUI()</code> call on one code path led to a subtle bug&mdash;but rather than patching it with more try/catch and return logic, there&rsquo;s a cleaner C++ solution. This article shows how to use <strong data-end="224" data-start="194">RAII and <code data-end="222" data-start="205">wil::scope_exit</code></strong> to guarantee cleanup across all code paths, even in asynchronous callbacks.</p>
<blockquote>
	<h3>
		<a href="https://devblogs.microsoft.com/oldnewthing/20251016-00/?p=111691">Using RAII to remedy a defect where not all code paths performed required exit actions</a></h3>
	<p>
		by Raymond Chen</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		A team asked me to review their pull request that fixed a bug that was caused by failing to perform some required action along all code paths. Here&rsquo;s a simplified sketch:</p>
	<pre tabindex="0">
void MySpecialFeature::OnButtonClick()&#10;{&#10;    try {&#10;        auto file = PickFile();&#10;        if (!file) {&#10;            DismissUI();&#10;            return;&#10;        }&#10;&#10;        if (ConfirmAction()) {&#10;            if (m_useAlgorithm1) {&#10;                // StartAlgorithm1 invokes the lambda when finished.&#10;                StartAlgorithm1(file, [self = shared_from_this()] {&#10;                    self-&gt;DismissUI();&#10;                });&#10;            } else {&#10;                RunAlgorithm2(file);&#10;                DismissUI();&#10;            }&#10;        } else { // this block was missing&#10;        &nbsp;  DismissUI(); &#10;        } &#10;    } catch (...) {&#10;        DismissUI();&#10;    }&#10;}</pre>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Fri, 28 Nov 2025 22:23:19 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>How to Iterate through std::tuple: C++26 Packs and Expansion Statements &#45;&#45; Bartlomiej Filipek</title>
      <link>https://isocpp.org//blog/2025/11/how-to-iterate-through-stdtuple-cpp26-packs-and-expansion-statements-bartlo</link>
      <guid>https://isocpp.org//blog/2025/11/how-to-iterate-through-stdtuple-cpp26-packs-and-expansion-statements-bartlo</guid>
      <description><![CDATA[<p>
	<img alt="filipek-howtoiterate.png" src="https://isocpp.org/files/img/filipek-howtoiterate.png" style="width: 371px; margin: 10px; float: right;" />In this final part of the tuple-iteration mini-series, we move beyond C++20 and C++23 techniques to explore how <strong data-end="121" data-start="112">C++26</strong> finally brings first-class language support for compile-time iteration. With <strong data-end="235" data-start="199">structured binding packs (P1061)</strong> and <strong data-end="272" data-start="240">expansion statements (P1306)</strong>, what once required clever template tricks can now be written in clean, expressive, modern C++.</p>
<blockquote>
	<h3>
		<a href="https://www.cppstories.com/2025/tuple-iteration-cpp26/">C++ Templates: How to Iterate through std::tuple: C++26 Packs and Expansion Statements</a></h3>
	<p>
		by&nbsp;Bartlomiej Filipek</p>
</blockquote>
<p>
	From the article:</p>
<blockquote>
	<p>
		In&nbsp;<a href="https://www.cppstories.com/2022/tuple-iteration-basics/">part 1</a>&nbsp;of this mini-series, we looked at the basics of iterating over a&nbsp;<code>std::tuple</code>&nbsp;using&nbsp;<code>index_sequence</code>&nbsp;and fold expressions. In&nbsp;<a href="https://www.cppstories.com/2022/tuple-iteration-apply/">part 2</a>, we simplified things with&nbsp;<code>std::apply</code>&nbsp;and even created helpers like&nbsp;<code>for_each_tuple</code>&nbsp;and&nbsp;<code>transform_tuple</code>.</p>
	<p>
		So far, we used C++ features up to C++20/23&hellip; but now, in C++26, we finally get language-level tools that make tuple iteration straightforward and expressive. In this article, we&rsquo;ll explore two new techniques:</p>
	<ul>
		<li>
			Structured bindings can introduce a pack -&nbsp;<a href="https://wg21.link/P1061R10">P1061</a>&nbsp;- turn a tuple into a pack of variables.</li>
		<li>
			Expansion statements&nbsp;<a href="https://wg21.link/p1306">P1306</a>&nbsp;- the ultimate &ldquo;compile-time loop&rdquo; syntax.</li>
	</ul>
</blockquote>
<p>
	&nbsp;</p>]]></description>
      <dc:subject><![CDATA[News, Articles & Books, Events,]]></dc:subject>
      <pubDate>Tue, 25 Nov 2025 21:55:16 +0000</pubDate>
      <dc:creator>Blog Staff</dc:creator>
    </item>

    <item>
      <title>C++ Casts: To lie, and hopefully &#45; to lie usefully &#45; Patrice Roy &#45; Meeting C++ 2025</title>
      <link>https://isocpp.org//blog/2025/11/cpp-casts-to-lie-and-hopefully-to-lie-usefully-patrice-roy-meeting-c-2025</link>
      <guid>https://isocpp.org//blog/2025/11/cpp-casts-to-lie-and-hopefully-to-lie-usefully-patrice-roy-meeting-c-2025</guid>
      <description><![CDATA[<p>
	Patrice Roy gave a great talk online on C++ casts at Meetign C++ 2025</p>
<blockquote>
	<h2>
		<a href="https://www.youtube.com/watch?v=spxCeWT-GrA">To lie, and hopefully - to lie usefully - Patrice Roy - Meeting C++ 2025</a></h2>
	<p>
		by Patrice Roy</p>
	<p>
		<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="315" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/spxCeWT-GrA?si=Riv8-jQVZGUjpDUl" title="YouTube video player" width="560"></iframe></p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Video & On-Demand,]]></dc:subject>
      <pubDate>Sun, 23 Nov 2025 16:19:05 +0000</pubDate>
      <dc:creator>Meeting C++</dc:creator>
    </item>

    <item>
      <title>Concept&#45;Based Generic Programming &#45;&#45; Bjarne Stroustrup</title>
      <link>https://isocpp.org//blog/2025/11/concept-based-generic-programming-bjarne-stroustrup</link>
      <guid>https://isocpp.org//blog/2025/11/concept-based-generic-programming-bjarne-stroustrup</guid>
      <description><![CDATA[<p>
	A new paper:</p>
<blockquote>
	<h3>
		Bjarne Stroustrup: Concept-Based Generic Programming</h3>
	<p>
		<a href="https://www.stroustrup.com/Concept-based-GP.pdf">https://www.stroustrup.com/Concept-based-GP.pdf</a></p>
	<p>
		We present programming techniques to illustrate the facilities and principles of C++ generic programming using concepts. Concepts are C++&rsquo;s way to express constraints on generic code. As an initial example, we provide a simple type system that eliminates narrowing conversions and provides range checking without unnecessary notational or run-time overhead.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[News, Articles & Books,]]></dc:subject>
      <pubDate>Sat, 22 Nov 2025 21:15:37 +0000</pubDate>
      <dc:creator>Bjarne Stroustrup</dc:creator>
    </item>

    
    </channel>
</rss>