Compilation failure due to std::shared_ptr::unique() usage in C++20
When compiling Inkscape on Windows with CLang (MSYS2) I get the following errors:
FAILED: src/util/CMakeFiles/util_LIB.dir/object-renderer.cpp.obj
D:\msys64\clang64\bin\c++.exe -DBOOST_STACKTRACE_USE_WINDBG -DHAVE_CONFIG_H -DWITH_CSSBLEND -DWITH_MESH -DWITH_SVG2 -D_DLL -D_MT -ID:/inkscape-clang-dbg/src/util -ID:/inkscape/src/util -ID:/inkscape -ID:/inkscape/src -ID:/inkscape-clang-dbg/include -ID:/inkscape/src/3rdp
arty/2geom/include -ID:/inkscape/src/3rdparty/2geom/include/2geom -isystem D:/msys64/clang64/include/pango-1.0 -isystem D:/msys64/clang64/include/harfbuzz -isystem D:/msys64/clang64/include/freetype2 -isystem D:/msys64/clang64/include/cairo -isystem D:/msys64/clang64/inc
lude/libsoup-2.4 -isystem D:/msys64/clang64/include/glib-2.0 -isystem D:/msys64/clang64/lib/glib-2.0/include -isystem D:/msys64/clang64/include/libpng16 -isystem D:/msys64/clang64/include/pixman-1 -isystem D:/msys64/clang64/include/fribidi -isystem D:/msys64/clang64/incl
ude/libxml2 -isystem D:/msys64/clang64/include/poppler -isystem D:/msys64/clang64/include/libwpg-0.3 -isystem D:/msys64/clang64/include/librevenge-0.0 -isystem D:/msys64/clang64/include/libwpd-0.10 -isystem D:/msys64/clang64/include/libvisio-0.1 -isystem D:/msys64/clang6
4/include/libcdr-0.1 -isystem D:/msys64/clang64/include/gtkmm-3.0 -isystem D:/msys64/clang64/lib/gtkmm-3.0/include -isystem D:/msys64/clang64/include/sigc++-2.0 -isystem D:/msys64/clang64/lib/sigc++-2.0/include -isystem D:/msys64/clang64/include/atkmm-1.6 -isystem D:/msy
s64/clang64/lib/atkmm-1.6/include -isystem D:/msys64/clang64/include/glibmm-2.4 -isystem D:/msys64/clang64/lib/glibmm-2.4/include -isystem D:/msys64/clang64/include/atk-1.0 -isystem D:/msys64/clang64/include/giomm-2.4 -isystem D:/msys64/clang64/lib/giomm-2.4/include -isy
stem D:/msys64/clang64/include/cairomm-1.0 -isystem D:/msys64/clang64/lib/cairomm-1.0/include -isystem D:/msys64/clang64/include/pangomm-1.4 -isystem D:/msys64/clang64/lib/pangomm-1.4/include -isystem D:/msys64/clang64/include/gdk-pixbuf-2.0 -isystem D:/msys64/clang64/in
clude/gdkmm-3.0 -isystem D:/msys64/clang64/lib/gdkmm-3.0/include -isystem D:/msys64/clang64/include/gtk-3.0 -isystem D:/msys64/clang64/include/webp -isystem D:/msys64/clang64/include/gspell-1 -isystem D:/msys64/clang64/include/enchant-2 -isystem D:/msys64/clang64/include
/gtksourceview-4 -isystem D:/msys64/clang64/include/GraphicsMagick -DG_DISABLE_ASSERT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -DGLIBMM_DISABLE_DEPRECATED -DGTKMM_DISABLE_DEPRECATED -DGDKMM_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -fstack-protect
or-strong -Werror=format -Werror=format-security -Werror=ignored-qualifiers -Werror=return-type -Wno-switch -Wmisleading-indentation -mms-bitfields -m64 -DLIBDEFLATE_DLL -fopenmp=libomp -DSIGCXX_DISABLE_DEPRECATED -O3 -DNDEBUG -std=gnu++20 -fdiagnostics-color -MD -MT src
/util/CMakeFiles/util_LIB.dir/object-renderer.cpp.obj -MF src\util\CMakeFiles\util_LIB.dir\object-renderer.cpp.obj.d -o src/util/CMakeFiles/util_LIB.dir/object-renderer.cpp.obj -c D:/inkscape/src/util/object-renderer.cpp
In file included from D:/inkscape/src/util/object-renderer.cpp:10:
In file included from D:/inkscape/src/util/object-renderer.h:12:
In file included from D:/inkscape/src/display/drawing.h:22:
In file included from D:/inkscape/src/3rdparty/2geom/include/2geom/pathvector.h:41:
D:/inkscape/src/3rdparty/2geom/include/2geom/path.h:846:20: error: no member named 'unique' in 'std::shared_ptr<Geom::PathInternal::PathData>'
846 | if (!_data.unique()) {
| ~~~~~ ^
1 error generated.
It seems that the std::shared_ptr::unique()
method was removed in C++20: https://en.cppreference.com/w/cpp/memory/shared_ptr/unique
Edited by lb90