Build failure on FreeBSD due to usage of std::result_of
We see the following compile error of mkvtoolnix-84.0 with clang 16.0.6 on FreeBSD:
c++ -Wall -Wno-comment -Wfatal-errors -D_FILE_OFFSET_BITS=64 -DQT_NO_KEYWORDS -DMTX_LOCALE_DIR=\"/usr/local/share/locale\" -DMTX_PKG_DATA_DIR=\"/usr/local/share/mkvtoolnix\" -DMTX_DOC_DIR=\"/usr/local/share/doc/mkvtoolnix\" -fstack-protector-strong -O3 -Ilib/nlohmann-json/include -Ilib/fmt/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -DLIBICONV_PLUG -isystem /usr/local/include -fPIC -std=c++20 -Wnon-virtual-dtor -Wextra -Wno-missing-field-initializers -Wunused -Wpedantic -Woverloaded-virtual -Wshadow -Qunused-arguments -Wno-self-assign -Wno-mismatched-tags -Wno-inconsistent-missing-override -Wno-potentially-evaluated-expression -Wno-extra-semi -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_WIDGETS_LIB -DQT_SVG_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -DQT_CORE_LIB -fPIC -pthread -I/usr/local/include/qt6 -I/usr/local/include/qt6/QtDBus -I/usr/local/include/qt6/QtWidgets -I/usr/local/include/qt6/QtSvg -I/usr/local/include/qt6/QtMultimedia -I/usr/local/include/qt6/QtGui -I/usr/local/include/qt6/QtNetwork -I/usr/local/include/qt6/QtConcurrent -I/usr/local/include/qt6/QtCore -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/lib/qt6/mkspecs/freebsd-clang -I/usr/local/include -O2 -pipe -DLIBICONV_PLUG -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing -DLIBICONV_PLUG -isystem /usr/local/include -include src/common/common_pch.h -I. -Ilib -Ilib/avilib-0.6.10 -Isrc -Ilib/utf8-cpp/source -c -MMD -MF /wrkdirs/usr/ports/multimedia/mkvtoolnix/work-qt6/mkvtoolnix-84.0/rake.d/dependency.d/tmp/src_mkvtoolnix-gui_header_editor_bool_value_page_o.d -o src/mkvtoolnix-gui/header_editor/bool_value_page.o -x c++ src/mkvtoolnix-gui/header_editor/bool_value_page.cpp
In file included from src/mkvtoolnix-gui/util/settings.cpp:19:
src/common/sorting.h:30:43: fatal error: no template named 'result_of' in namespace 'std'; did you mean 'boost::result_of'?
, typename Tcriterion = typename std::result_of< Tcriterion_maker(typename std::iterator_traits<Titer>::value_type) >::type
^~~~~~~~~~~~~~
boost::result_of
/usr/local/include/boost/utility/result_of.hpp:72:29: note: 'boost::result_of' declared here
template<typename F> struct result_of;
^
CXX src/mkvtoolnix-gui/header_editor/empty_page.cpp
Since std::result_of
is deprecated in c++17 and removed in c++20, what would be the best way to workaround this issue?