brandonmpetty / Doxa

A Local Adaptive Thresholding framework for image binarization written in C++, with JS and Python bindings. Implementing: Otsu, Bernsen, Niblack, Sauvola, Wolf, Gatos, NICK, Su, T.R. Singh, WAN, ISauvola, Bataineh, Chan and Shafait.
https://brandonmpetty.github.io/Doxa/WebAssembly
Creative Commons Zero v1.0 Universal
164 stars 37 forks source link

std::get on Mac OS #10

Closed jwijffels closed 4 years ago

jwijffels commented 4 years ago

Hello there

I've made an R wrapper around this package as I needed it in some preprocessing for handwritten text recognition. Package was published today on CRAN at https://cran.r-project.org/web/packages/image.binarization/index.html, source code has been put at https://github.com/DIGI-VUB/image.binarization Putting a package on CRAN also means I have to maintain it and fixing possible issues. One of the issues appearing is that CRAN tests on various platforms (windows / debian / solaris / mac) with different compiler settings. When testing on Mac OS (version 10.13), I'm getting the following compilation issue indicating std::get is only available in Mac OS 10.14. That's unfortunate given that I have no option to update Mac OS on CRAN to something higher. Hence my question, what would be a good way to solve this, such that it works on Mac OS 10.13 which does not have std::get. See below the compilation trace. Thanks for the help!

* installing *source* package ‘image.binarization’ ...
** package ‘image.binarization’ successfully unpacked and MD5 sums checked
** using staged installation
** libs
clang++ -mmacosx-version-min=10.13 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG  -I'/Users/user9yOn5yDN/R/Rcpp/include' -I/usr/local/include   -fPIC  -Wall -g -O2  -c RcppExports.cpp -o RcppExports.o
clang++ -mmacosx-version-min=10.13 -std=gnu++17 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG  -I'/Users/user9yOn5yDN/R/Rcpp/include' -I/usr/local/include   -fPIC  -Wall -g -O2  -c _rcpp_doxa.cpp -o _rcpp_doxa.o
In file included from _rcpp_doxa.cpp:4:
In file included from ./Doxa/Algorithm.hpp:7:
./Doxa/Parameters.hpp:36:12: error: call to unavailable function 'get': introduced in macOS 10.14
                                return std::get<Type>(pos->second);
                                       ^~~~~~~~~~~~~~
./Doxa/Bernsen.hpp:30:38: note: in instantiation of function template specialization 'Doxa::Parameters::Get<int>' requested here
                        const int windowSize = parameters.Get("window", 75);
                                                          ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1393:22: note: candidate function [with _Tp = int, _Types = <int, double>] has been explicitly made unavailable
constexpr const _Tp& get(const variant<_Types...>& __v) {
                     ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1401:23: note: candidate function [with _Tp = int, _Types = <int, double>] not viable: no known conversion from 'const std::__1::variant<int, double>' to 'const variant<int, double> &&' for 1st argument
constexpr const _Tp&& get(const variant<_Types...>&& __v) {
                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:780:17: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 & get(pair<_T1, _T2>& __p) _NOEXCEPT
                ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:787:23: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 const & get(pair<_T1, _T2> const& __p) _NOEXCEPT
                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:794:18: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 && get(pair<_T1, _T2>&& __p) _NOEXCEPT
                 ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:801:24: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 const && get(pair<_T1, _T2> const&& __p) _NOEXCEPT
                       ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:808:17: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 & get(pair<_T2, _T1>& __p) _NOEXCEPT
                ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:815:23: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 const & get(pair<_T2, _T1> const& __p) _NOEXCEPT
                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:822:18: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 && get(pair<_T2, _T1>&& __p) _NOEXCEPT
                 ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:829:24: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 const && get(pair<_T2, _T1> const&& __p) _NOEXCEPT
                       ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:1035:16: note: candidate template ignored: could not match 'tuple' against 'variant'
constexpr _T1& get(tuple<_Args...>& __tup) noexcept
               ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:1042:22: note: candidate template ignored: could not match 'tuple' against 'variant'
constexpr _T1 const& get(tuple<_Args...> const& __tup) noexcept
                     ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:1049:17: note: candidate template ignored: could not match 'tuple' against 'variant'
constexpr _T1&& get(tuple<_Args...>&& __tup) noexcept
                ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:1056:23: note: candidate template ignored: could not match 'tuple' against 'variant'
constexpr _T1 const&& get(tuple<_Args...> const&& __tup) noexcept
                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1376:16: note: candidate template ignored: deduced type 'variant<...>' of 1st parameter does not match adjusted type 'const variant<...>' of argument [with _Tp = int, _Types = <int, double>]
constexpr _Tp& get(variant<_Types...>& __v) {
               ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1384:17: note: candidate template ignored: deduced type 'variant<...>' of 1st parameter does not match adjusted type 'const variant<...>' of argument [with _Tp = int, _Types = <int, double>]
constexpr _Tp&& get(variant<_Types...>&& __v) {
                ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:746:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(pair<_T1, _T2>& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:754:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(const pair<_T1, _T2>& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:763:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(pair<_T1, _T2>&& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:771:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(const pair<_T1, _T2>&& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:958:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(tuple<_Tp...>& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:967:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(const tuple<_Tp...>& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:976:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(tuple<_Tp...>&& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:986:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(const tuple<_Tp...>&& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/array:307:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(array<_Tp, _Size>& __a) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/array:316:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(const array<_Tp, _Size>& __a) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/array:327:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(array<_Tp, _Size>&& __a) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/array:336:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(const array<_Tp, _Size>&& __a) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1336:59: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
constexpr variant_alternative_t<_Ip, variant<_Types...>>& get(
                                                          ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1346:60: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
constexpr variant_alternative_t<_Ip, variant<_Types...>>&& get(
                                                           ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1356:65: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
constexpr const variant_alternative_t<_Ip, variant<_Types...>>& get(
                                                                ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1366:66: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
constexpr const variant_alternative_t<_Ip, variant<_Types...>>&& get(
                                                                 ^
In file included from _rcpp_doxa.cpp:4:
In file included from ./Doxa/Algorithm.hpp:7:
./Doxa/Parameters.hpp:36:12: error: call to unavailable function 'get': introduced in macOS 10.14
                                return std::get<Type>(pos->second);
                                       ^~~~~~~~~~~~~~
./Doxa/Sauvola.hpp:32:32: note: in instantiation of function template specialization 'Doxa::Parameters::Get<double>' requested here
                        const double k = parameters.Get("k", 0.2);
                                                    ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1393:22: note: candidate function [with _Tp = double, _Types = <int, double>] has been explicitly made unavailable
constexpr const _Tp& get(const variant<_Types...>& __v) {
                     ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1401:23: note: candidate function [with _Tp = double, _Types = <int, double>] not viable: no known conversion from 'const std::__1::variant<int, double>' to 'const variant<int, double> &&' for 1st argument
constexpr const _Tp&& get(const variant<_Types...>&& __v) {
                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:780:17: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 & get(pair<_T1, _T2>& __p) _NOEXCEPT
                ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:787:23: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 const & get(pair<_T1, _T2> const& __p) _NOEXCEPT
                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:794:18: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 && get(pair<_T1, _T2>&& __p) _NOEXCEPT
                 ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:801:24: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 const && get(pair<_T1, _T2> const&& __p) _NOEXCEPT
                       ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:808:17: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 & get(pair<_T2, _T1>& __p) _NOEXCEPT
                ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:815:23: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 const & get(pair<_T2, _T1> const& __p) _NOEXCEPT
                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:822:18: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 && get(pair<_T2, _T1>&& __p) _NOEXCEPT
                 ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:829:24: note: candidate template ignored: could not match 'pair' against 'variant'
constexpr _T1 const && get(pair<_T2, _T1> const&& __p) _NOEXCEPT
                       ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:1035:16: note: candidate template ignored: could not match 'tuple' against 'variant'
constexpr _T1& get(tuple<_Args...>& __tup) noexcept
               ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:1042:22: note: candidate template ignored: could not match 'tuple' against 'variant'
constexpr _T1 const& get(tuple<_Args...> const& __tup) noexcept
                     ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:1049:17: note: candidate template ignored: could not match 'tuple' against 'variant'
constexpr _T1&& get(tuple<_Args...>&& __tup) noexcept
                ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:1056:23: note: candidate template ignored: could not match 'tuple' against 'variant'
constexpr _T1 const&& get(tuple<_Args...> const&& __tup) noexcept
                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1376:16: note: candidate template ignored: deduced type 'variant<...>' of 1st parameter does not match adjusted type 'const variant<...>' of argument [with _Tp = double, _Types = <int, double>]
constexpr _Tp& get(variant<_Types...>& __v) {
               ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1384:17: note: candidate template ignored: deduced type 'variant<...>' of 1st parameter does not match adjusted type 'const variant<...>' of argument [with _Tp = double, _Types = <int, double>]
constexpr _Tp&& get(variant<_Types...>&& __v) {
                ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:746:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(pair<_T1, _T2>& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:754:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(const pair<_T1, _T2>& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:763:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(pair<_T1, _T2>&& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:771:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(const pair<_T1, _T2>&& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:958:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(tuple<_Tp...>& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:967:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(const tuple<_Tp...>& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:976:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(tuple<_Tp...>&& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:986:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(const tuple<_Tp...>&& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/array:307:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(array<_Tp, _Size>& __a) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/array:316:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(const array<_Tp, _Size>& __a) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/array:327:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(array<_Tp, _Size>&& __a) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/array:336:1: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
get(const array<_Tp, _Size>&& __a) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1336:59: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
constexpr variant_alternative_t<_Ip, variant<_Types...>>& get(
                                                          ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1346:60: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
constexpr variant_alternative_t<_Ip, variant<_Types...>>&& get(
                                                           ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1356:65: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
constexpr const variant_alternative_t<_Ip, variant<_Types...>>& get(
                                                                ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/variant:1366:66: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Ip'
constexpr const variant_alternative_t<_Ip, variant<_Types...>>&& get(
                                                                 ^
2 errors generated.
make: *** [_rcpp_doxa.o] Error 1
ERROR: compilation failed for package ‘image.binarization’
* removing ‘/Users/user9yOn5yDN/R/image.binarization’
jwijffels commented 4 years ago

@brandonmpetty just tagging you here so that you are aware of the question - even if you are not frequently on github

bpetty-formfast commented 4 years ago

That is a good question. Let me do some research on the subject and I'll get back with you shortly.

jwijffels commented 4 years ago

Thanks for responding. FYI. I now basically solved this as indicated in this commit https://github.com/DIGI-VUB/image.binarization/commit/f0157d9565f0cbd501a8a19a1e72252677462c90

bpetty-formfast commented 4 years ago

Great! I was going to say, it appears like std::get_if(...) is the workaround, which you have already found. Thanks for bringing it up.

jwijffels commented 4 years ago

Free free to incorporate it upstream if you feel this is usefull.