getsentry / sentry-native

Sentry SDK for C, C++ and native applications.
MIT License
393 stars 166 forks source link

Forced C++20 requirement? #1041

Open zokrovi opened 1 week ago

zokrovi commented 1 week ago

Unfortunately, a recent crashpad update (I believe it was 0.7.6) includes changes to mini chromium which now requires C++20 features like std::ranges. I can't see a way to conditionally make mini chromium use pre-C++20 standards.

This effectively hinders adoption and makes it impossible for a large number of projects out there to upgrade beyond sentry-native 0.7.6 as they cannot move on from C++17 yet, short of mirroring and patching mini chromium.

supervacuus commented 1 week ago

Unfortunately, a recent crashpad update (I believe it was 0.7.6) includes changes to mini chromium which now requires C++20 features like std::ranges. I can't see a way to conditionally make mini chromium use pre-C++20 standards.

While we use a getsentry fork of crashpad, we don't use one for mini_chromium (and instead point the submodule to the upstream Google repo), so whenever crashpad updates its code based on mini_chromium changes (or vice versa, whoever is the driver), we go with the flow. crashpad doesn't generally consider build-tool adoption as a limiting factor since they are their primary user, let alone providing build parameters to minimize their effect.

This is a much bigger topic for Sentry, even though no clear boundary has yet been defined on when to fork mini_chromium for build-tooling compatibility.

This effectively hinders adoption and makes it impossible for a large number of projects out there to upgrade beyond sentry-native 0.7.6 as they cannot move on from C++17 yet, short of mirroring and patching mini chromium.

I fully understand this issue. Sadly, "mirroring and patching" mini_chromium won't suffice since you might also have to track the related changes in crashpad. This is essentially the effort of maintaining an additional transitive dependency fork for Sentry, too, so I cannot guarantee this will happen.

CC: @kahest.

sbhorvatic commented 1 week ago

~Having the same error while setting -DCMAKE_CXX_STANDARD=20 as the build still uses C++17. Any other params I can pass to build using C++20?~

User error, I am using libc++-14-dev which seem to treat its implementation of ranges as experimental until version 16