Skip to main content
Redhat Developers  Logo
  • AI

    Get started with AI

    • Red Hat AI
      Accelerate the development and deployment of enterprise AI solutions.
    • AI learning hub
      Explore learning materials and tools, organized by task.
    • AI interactive demos
      Click through scenarios with Red Hat AI, including training LLMs and more.
    • AI/ML learning paths
      Expand your OpenShift AI knowledge using these learning resources.
    • AI quickstarts
      Focused AI use cases designed for fast deployment on Red Hat AI platforms.
    • No-cost AI training
      Foundational Red Hat AI training.

    Featured resources

    • OpenShift AI learning
    • Open source AI for developers
    • AI product application development
    • Open source-powered AI/ML for hybrid cloud
    • AI and Node.js cheat sheet

    Red Hat AI Factory with NVIDIA

    • Red Hat AI Factory with NVIDIA is a co-engineered, enterprise-grade AI solution for building, deploying, and managing AI at scale across hybrid cloud environments.
    • Explore the solution
  • Learn

    Self-guided

    • Documentation
      Find answers, get step-by-step guidance, and learn how to use Red Hat products.
    • Learning paths
      Explore curated walkthroughs for common development tasks.
    • Guided learning
      Receive custom learning paths powered by our AI assistant.
    • See all learning

    Hands-on

    • Developer Sandbox
      Spin up Red Hat's products and technologies without setup or configuration.
    • Interactive labs
      Learn by doing in these hands-on, browser-based experiences.
    • Interactive demos
      Click through product features in these guided tours.

    Browse by topic

    • AI/ML
    • Automation
    • Java
    • Kubernetes
    • Linux
    • See all topics

    Training & certifications

    • Courses and exams
    • Certifications
    • Skills assessments
    • Red Hat Academy
    • Learning subscription
    • Explore training
  • Build

    Get started

    • Red Hat build of Podman Desktop
      A downloadable, local development hub to experiment with our products and builds.
    • Developer Sandbox
      Spin up Red Hat's products and technologies without setup or configuration.

    Download products

    • Access product downloads to start building and testing right away.
    • Red Hat Enterprise Linux
    • Red Hat AI
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform
    • See all products

    Featured

    • Red Hat build of OpenJDK
    • Red Hat JBoss Enterprise Application Platform
    • Red Hat OpenShift Dev Spaces
    • Red Hat Developer Toolset

    References

    • E-books
    • Documentation
    • Cheat sheets
    • Architecture center
  • Community

    Get involved

    • Events
    • Live AI events
    • Red Hat Summit
    • Red Hat Accelerators
    • Community discussions

    Follow along

    • Articles & blogs
    • Developer newsletter
    • Videos
    • Github

    Get help

    • Customer service
    • Customer support
    • Regional contacts
    • Find a partner

    Join the Red Hat Developer program

    • Download Red Hat products and project builds, access support documentation, learning content, and more.
    • Explore the benefits

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

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

    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

    • Every layer counts: Defense in depth for AI agents with Red Hat AI

    • Fun in the RUN instruction: Why container builds with distroless images can surprise you

    • Trusted software factory: Building trust in the agentic AI era

    • Build a zero trust AI pipeline with OpenShift and RHEL CVMs

    • Red Hat Hardened Images: Top 5 benefits for software developers

    Red Hat Developers logo LinkedIn YouTube Twitter Facebook

    Platforms

    • Red Hat AI
    • Red Hat Enterprise Linux
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform
    • See all products

    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
    © 2026 Red Hat

    Red Hat legal and privacy links

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

    Chat Support

    Please log in with your Red Hat account to access chat support.