Skip to main content
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 Red Hat 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

    • Red Hat OpenShift AI
    • 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.

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

    • 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.

ConsoleDocsSupport Search
New For you

Recommended

We'll recommend resources you may like as you browse. Try these suggestions for now.

  • Product downloads
  • Cheat sheets
  • Red Hat Developer learning portal
  • Developer blog
  • E-books
  • Developer Sandbox
Log in

Get more with a Red Hat Developer account

  • Product downloads
  • Console access
  • Event registration
  • Training & trials
Explore more account benefitsLog in or register

A subscription may be required for some services.

Contact us

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

    • A day in the life of an NVIDIA H100 on Red Hat OpenShift 5

    • Migrate BuildConfigs to builds for Red Hat OpenShift with one plug-in install

    • Run Red Hat Enterprise Linux CoreOS on NVIDIA BlueField DPUs

    • Agent harness engineering: Separating model capabilities from enforcement

    • What's new for developers in Red Hat Enterprise Linux 10.3 and 9.9

    Red Hat Developers logo

    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
    Ask AI