Uh oh!
There was an error while loading. Please reload this page.
build: switch to C++23 - #61132
Conversation
nodejs-github-bot
commented
Dec 20, 2025
Review requested:
|
targos
commented
Dec 20, 2025
Shows an error in quic code (@jasnell): |
targos
commented
Dec 20, 2025
I opened ngtcp2/ngtcp2#1970 for the ngtcp2 error. |
ShenHongFei
commented
Dec 24, 2025
temporary workaround. Aside from this, there are no other problems, and it compiles successfully. diff --git a/src/quic/streams.h b/src/quic/streams.h
index c230815d78e..3c9fb100219 100644
--- a/src/quic/streams.h+++ b/src/quic/streams.h@@ -292,7 +292,12 @@ class Stream final : public AsyncWrap,
struct PendingHeaders;
class Outbound;
-+++ struct OutboundDeleter {+ void operator() (Outbound* ptr) const;+ };+
// Gets a reader for the data received for this stream from the peer,
BaseObjectPtr<Blob::Reader> get_reader();
@@ -335,7 +340,7 @@ class Stream final : public AsyncWrap,
AliasedStruct<Stats> stats_;
AliasedStruct<State> state_;
BaseObjectWeakPtr<Session> session_;
- std::unique_ptr<Outbound> outbound_;+ std::unique_ptr<Outbound, OutboundDeleter> outbound_;
std::shared_ptr<DataQueue> inbound_;
// If the stream cannot be opened yet, it will be created in a pending state.
diff --git a/src/quic/streams.cc b/src/quic/streams.cc
index 8fe5b72ce1f..8fa9c264c4f 100644
--- a/src/quic/streams.cc+++ b/src/quic/streams.cc@@ -739,6 +739,11 @@ class Stream::Outbound final : public MemoryRetainer {
size_t uncommitted_ = 0;
};
++void Stream::OutboundDeleter::operator() (Stream::Outbound* ptr) const {+ delete ptr;+}+
// ============================================================================
#define V(name, key, no_side_effect) \
@@ -1038,7 +1043,7 @@ void Stream::set_outbound(std::shared_ptr<DataQueue> source) {
if (!source || !is_writable()) return;
Debug(this, "Setting the outbound data source");
DCHECK_NULL(outbound_);
- outbound_ = std::make_unique<Outbound>(this, std::move(source));+ outbound_ = std::unique_ptr<Outbound, OutboundDeleter>(new Outbound(this, std::move(source)));
state_->has_outbound = 1;
if (!is_pending()) session_->ResumeStream(id());
}
|
dygabo
commented
Jan 7, 2026
is this planned to be backported to v25 and v24 as well or it stays for v26 only? |
targos
commented
Jan 8, 2026
@nodejs/quic PTAL at #61132 (comment). |
Following Chromium. Closes: nodejs#61125 Refs: https://issues.chromium.org/issues/388070065
targos
commented
Jan 23, 2026
Now that quic is behind a compile-time flag, this should pass. |
targos
commented
Jan 23, 2026
@nodejs/build does it have to be semver-major? |
nodejs-github-bot
commented
Jan 24, 2026
richardlau
commented
Jan 24, 2026
I think we've always treated these as semver-major as |
targos
commented
Jan 26, 2026
Looks like this triggers an error with GCC 14: https://ci.nodejs.org/job/node-test-commit-linux/68207/nodes=alpine-latest-x64/console |
targos
commented
Jan 26, 2026
Config for Windows doesn't seem to work: https://ci.nodejs.org/job/node-compile-windows/65002/nodes=win-vs2022_clang/console |
miladfarca
commented
Jan 26, 2026
fyi V8 still builds with |
StefanStojanovic
commented
Jan 29, 2026
VS2022 comes with Clang 19.x, which doesn't support '/std:c++23preview'. VS2026 comes with Clang 20.x, which supports it, so the way I see it, the only way to make this happen is by using VS2022. |
targos
commented
Jan 29, 2026
I guess you meant "by using VS2026" :) What do you think about it? |
StefanStojanovic
commented
Feb 5, 2026
Correct, it was a typo. The compilation works on VS2026, as far as I know (tested on main), so there is no problem there. Infra (both test and release) is where most (if not all) of the work would have to be done - creating new machines, setting them up, connecting to Jenkins, etc. I've done this for VS2022, so it should be very similar for VS2026. The question I have is tied to the ETA - is there some date by which we have to transition? I saw from a comment that for V8, |
targos
commented
Feb 5, 2026
I wasn't aware that V8 didn't make the switch. We can wait for them. |
StefanStojanovic
commented
Feb 6, 2026
I was thinking in this way - once v20 goes EOL in a few months, we can start removing VS2019 compilation machines, as they will no longer be needed (or should we keep them for some more time?). Once that's being worked on, we can start adding VS2026 machines in parallel (basically replacing 2019 with 2026), thus keeping the number of VMs the same. Does this sound reasonable to you? |
targos
commented
Feb 6, 2026
Sounds good to me! |
This pull request has been marked as stale due to 90 days of inactivity. |
Following Chromium.
Closes: #61125
Refs: https://issues.chromium.org/issues/388070065