Skip to main content
Redhat Developers  Logo
  • Products

    Featured

    • Red Hat Enterprise Linux
      Red Hat Enterprise Linux Icon
    • Red Hat OpenShift AI
      Red Hat OpenShift AI
    • Red Hat Enterprise Linux AI
      Linux icon inside of a brain
    • Image mode for Red Hat Enterprise Linux
      RHEL image mode
    • Red Hat OpenShift
      Openshift icon
    • Red Hat Ansible Automation Platform
      Ansible icon
    • Red Hat Developer Hub
      Developer Hub
    • View All Red Hat Products
    • Linux

      • Red Hat Enterprise Linux
      • Image mode for Red Hat Enterprise Linux
      • Red Hat Universal Base Images (UBI)
    • Java runtimes & frameworks

      • JBoss Enterprise Application Platform
      • Red Hat build of OpenJDK
    • Kubernetes

      • Red Hat OpenShift
      • Microsoft Azure Red Hat OpenShift
      • Red Hat OpenShift Virtualization
      • Red Hat OpenShift Lightspeed
    • Integration & App Connectivity

      • Red Hat Build of Apache Camel
      • Red Hat Service Interconnect
      • Red Hat Connectivity Link
    • AI/ML

      • Red Hat OpenShift AI
      • Red Hat Enterprise Linux AI
    • Automation

      • Red Hat Ansible Automation Platform
      • Red Hat Ansible Lightspeed
    • Developer tools

      • Red Hat Trusted Software Supply Chain
      • Podman Desktop
      • Red Hat OpenShift Dev Spaces
    • Developer Sandbox

      Developer Sandbox
      Try Red Hat products and technologies without setup or configuration fees for 30 days with this shared Openshift and Kubernetes cluster.
    • Try at no cost
  • Technologies

    Featured

    • AI/ML
      AI/ML Icon
    • Linux
      Linux Icon
    • Kubernetes
      Cloud icon
    • Automation
      Automation Icon showing arrows moving in a circle around a gear
    • View All Technologies
    • Programming Languages & Frameworks

      • Java
      • Python
      • JavaScript
    • System Design & Architecture

      • Red Hat architecture and design patterns
      • Microservices
      • Event-Driven Architecture
      • Databases
    • Developer Productivity

      • Developer productivity
      • Developer Tools
      • GitOps
    • Secure Development & Architectures

      • Security
      • Secure coding
    • Platform Engineering

      • DevOps
      • DevSecOps
      • Ansible automation for applications and services
    • Automated Data Processing

      • AI/ML
      • Data Science
      • Apache Kafka on Kubernetes
      • View All Technologies
    • Start exploring in the Developer Sandbox for free

      sandbox graphic
      Try Red Hat's products and technologies without setup or configuration.
    • Try at no cost
  • Learn

    Featured

    • Kubernetes & Cloud Native
      Openshift icon
    • Linux
      Rhel icon
    • Automation
      Ansible cloud icon
    • Java
      Java icon
    • AI/ML
      AI/ML Icon
    • View All Learning Resources

    E-Books

    • GitOps Cookbook
    • Podman in Action
    • Kubernetes Operators
    • The Path to GitOps
    • View All E-books

    Cheat Sheets

    • Linux Commands
    • Bash Commands
    • Git
    • systemd Commands
    • View All Cheat Sheets

    Documentation

    • API Catalog
    • Product Documentation
    • Legacy Documentation
    • Red Hat Learning

      Learning image
      Boost your technical skills to expert-level with the help of interactive lessons offered by various Red Hat Learning programs.
    • Explore Red Hat Learning
  • Developer Sandbox

    Developer Sandbox

    • Access Red Hat’s products and technologies without setup or configuration, and start developing quicker than ever before with our new, no-cost sandbox environments.
    • Explore Developer Sandbox

    Featured Developer Sandbox activities

    • Get started with your Developer Sandbox
    • OpenShift virtualization and application modernization using the Developer Sandbox
    • Explore all Developer Sandbox activities

    Ready to start developing apps?

    • Try at no cost
  • Blog
  • Events
  • Videos

ISO C++ Feb 2023 meeting trip report (core language)

April 10, 2023
Jason Merrill
Related topics:
Linux
Related products:
Red Hat Enterprise Linux

Share:

    The C++ committee had its second hybrid meeting in Issaquah, WA in February, to finalize C++23.  This was also the venue where we finished up C++14.  I was there in person from Red Hat, while Thomas Rodgers and Jonathan Wakely attended virtually.  As usual, I spent most of my time in the Core working group.

    The primary goal of the meeting was to finish responding to national body comments on the draft and advance the result for balloting to become C++23, and indeed we did; the week went smoothly from my perspective.  We also spent a fair amount of time reviewing papers and issues that were not expected to go into C++23.

    Most of the C++23 fixes at this meeting were unremarkable, but a couple are worth mentioning:

    CWG2518 clarifies that implementations need to reject input with #error or failing static_assert, but we didn't want the latter to apply to uninstantiated templates (where previously no diagnostic was required), so we folded in P2593 which makes a failing static_assert only ill-formed at instantiation time.

    CWG2521 addressed uncertainty about how exactly user-defined literal suffixes should be treated like names; in particular, suffixes starting with an underscore should not be reserved to the implementation in the global namespace.  To reduce the ambiguity, we decided to deprecate the form of UDL operator declaration with a space between the "" and the suffix.

    Some of the NB comment resolutions from the November 2022 meeting are also worth calling out:

    DE-046 (P2564): consteval needs to propagate up

    If a function declared constexpr would be ill-formed because of trying to call a consteval function, promote it to consteval instead.

    consteval int id(int i) { return i; }
    template <typename T>
    constexpr int f(T t) {
        return t + id(t);
    }
    static_assert(f(3) == 6); // ok, f<int> promoted to consteval

    DE-038 (P2718): temporary lifetime and range-based for

    Dangling references to temporaries that are destroyed at the end of the initialization can be a problem in reference variable initialization, but are more of a hazard in range-based for loops because the reference being initialized is invisible to the user: in

    for (auto e : T()[0]) { ... }

    the T temporary is destroyed after the hidden range variable is initialized, so if the operator[] returns a reference, it's likely to be to an object that no longer exists by the time we get to the body of the loop.  Normal temporary lifetime extension doesn't apply because the temporary is the operand of a call, not bound directly to the reference.  This paper addresses the problem for range for by extending the lifetime of all temporaries in the range expression to cover the entire loop.

    CA-065 (P2589): static operator[]

    Since C++23 previously added static operator() and multi-parameter operator[], it's consistent to also add static operator[].

    GB-048 (P2647): Permitting static constexpr variables in constexpr functions

    A piece we missed in all the other recent constexpr relaxations; there's no good reason to prohibit static local variables with constant initialization in constexpr functions.

    US-16-045 (CWG2654): De-deprecating more volatile operations

    We previously reverted the deprecation of bitwise compound assignment (&=, |=) to volatile lvalues due to feedback from the embedded community where such operations are common.  This NB comment complained about treating bitwise operations differently from other arithmetic operations, so this resolution un-deprecates the rest of the compound assignment operatiors as well.

    FR-019-055 (CWG2631) clarified that consteval function calls in default arguments are constant-evaluated where the default argument is used, to be consistent with normal evaluation.  This avoids the need for compilers to handle source_location::current specially.

    At the Issaquah meeting, Core also did initial reviews of various papers hoping to make C++26, including:

    P2686 "constexpr structured bindings" proposes allowing structured bindings to be constexpr; this seems pretty straightforward to me.

    P1061 "Structured Bindings can introduce a Pack" proposes allowing a structured binding to be a new kind of pack, like in variadic templates:

    template <class F, class Tuple>
    constexpr decltype(auto) apply(F &&f, Tuple &&t)
    {
        auto&& [...elems] = t; // elems is a structured binding pack
        return std::invoke(std::forward<F>(f),
            forward_like<Tuple, decltype(elems)>(elems)...);
    }

    An interesting thing about this proposal is that it can be used outside of templates, so the name of a structured binding pack would now be type-dependent even in a non-template context.

    Various subgroups are working on less-stable proposals.  The Tooling SG is working to find common ground between various compilers for how to work in a build system, particularly around C++20 modules.  The Contracts SG is trying to agree on a minimum viable feature set to bring back the Contracts feature that was dropped from C++20.  The Safety SG is looking at ways to balance performance and safety, continuing the reexamination of Undefined Behavior that has been going on for years.

    The next meeting will be in Varna, Bulgaria in June, where we plan to do all C++26 work.

    Last updated: August 14, 2023
    Disclaimer: Please note the content in this blog post has not been thoroughly reviewed by the Red Hat Developer editorial team. Any opinions expressed in this post are the author's own and do not necessarily reflect the policies or positions of Red Hat.

    Related Posts

  • 2022 Fall C++ Standards Committee Meeting trip report

  • Recent Posts

    • Expand Model-as-a-Service for secure enterprise AI

    • OpenShift LACP bonding performance expectations

    • Build container images in CI/CD with Tekton and Buildpacks

    • How to deploy OpenShift AI & Service Mesh 3 on one cluster

    • JVM tuning for Red Hat Data Grid on Red Hat OpenShift 4

    Red Hat Developers logo LinkedIn YouTube Twitter Facebook

    Products

    • Red Hat Enterprise Linux
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform

    Build

    • Developer Sandbox
    • Developer Tools
    • Interactive Tutorials
    • API Catalog

    Quicklinks

    • Learning Resources
    • E-books
    • Cheat Sheets
    • Blog
    • Events
    • Newsletter

    Communicate

    • About us
    • Contact sales
    • Find a partner
    • Report a website issue
    • Site Status Dashboard
    • Report a security problem

    RED HAT DEVELOPER

    Build here. Go anywhere.

    We serve the builders. The problem solvers who create careers with code.

    Join us if you’re a developer, software engineer, web designer, front-end designer, UX designer, computer scientist, architect, tester, product manager, project manager or team lead.

    Sign me up

    Red Hat legal and privacy links

    • About Red Hat
    • Jobs
    • Events
    • Locations
    • Contact Red Hat
    • Red Hat Blog
    • Inclusion at Red Hat
    • Cool Stuff Store
    • Red Hat Summit
    © 2025 Red Hat

    Red Hat legal and privacy links

    • Privacy statement
    • Terms of use
    • All policies and guidelines
    • Digital accessibility

    Report a website issue