[sword-devel] Building 1.9.0 against ICU 75
Jaak Ristioja
jaak at ristioja.ee
Mon Jun 17 16:14:42 EDT 2024
Hi,
On 17.06.24 22:29, David "Judah's Shadow" Blue wrote:
> So my distro (openSUSE Tumbleweed) upgraded to ICU v75.1, this gave me all
> sorts of linking errors when trying to link BIBISH against sword 1.9.0. So I
> figured I'd rebuild the library, but now I'm getting compile errors from sword.
> I'm using the usrinst.sh and when I build I get the following errors
>
> In file included from /usr/include/unicode/unistr.h:39,
> from ../include/utf8transliterator.h:43,
> from ../src/mgr/swmgr.cpp:108:
> /usr/include/unicode/stringpiece.h:133:29: error: ‘enable_if_t’ in namespace
> ‘std’ does not name a template type
> 133 | typename = std::enable_if_t<
> | ^~~~~~~~~~~
> /usr/include/unicode/stringpiece.h:133:24: note: ‘std::enable_if_t’ is only
> available from C++14 onwards
> 133 | typename = std::enable_if_t<
> | ^~~
> /usr/include/unicode/stringpiece.h:133:40: error: expected ‘>’ before ‘<’
> token
> 133 | typename = std::enable_if_t<
> | ^
> In file included from /usr/include/unicode/uenum.h:25,
> from /usr/include/unicode/utrans.h:22,
> from /usr/include/unicode/translit.h:29,
> from ../include/utf8transliterator.h:45:
> /usr/include/unicode/localpointer.h:561:26: error: parameter declared ‘auto’
> 561 | template <typename Type, auto closeFunction>
> | ^~~~
> /usr/include/unicode/localpointer.h:573:76: error: template argument 2 is
> invalid
> 573 | explicit LocalOpenPointer(std::unique_ptr<Type,
> decltype(closeFunction)> &&p)
> |
> ^
> /usr/include/unicode/localpointer.h:583:78: error: template argument 2 is
> invalid
> 583 | LocalOpenPointer &operator=(std::unique_ptr<Type,
> decltype(closeFunction)> &&p) {
> |
> ^
> /usr/include/unicode/localpointer.h:599:59: error: template argument 2 is
> invalid
> 599 | operator std::unique_ptr<Type, decltype(closeFunction)> () && {
> | ^
> /usr/include/unicode/uenum.h:69:1: note: invalid template non-type parameter
> 69 | U_DEFINE_LOCAL_OPEN_POINTER(LocalUEnumerationPointer, UEnumeration,
> uenum_close);
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> /usr/include/unicode/uset.h:358:1: note: invalid template non-type parameter
> 358 | U_DEFINE_LOCAL_OPEN_POINTER(LocalUSetPointer, USet, uset_close);
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> /usr/include/unicode/utrans.h:258:1: note: invalid template non-type parameter
> 258 | U_DEFINE_LOCAL_OPEN_POINTER(LocalUTransliteratorPointer,
> UTransliterator, utrans_close);
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> make[1]: *** [Makefile:1426: swmgr.lo] Error 1
> make[1]: Leaving directory '/home/judahsshadow/Downloads/sword-1.9.0/lib'
> make: *** [Makefile:630: all-recursive] Error 1
>
> Has anyone built against ICU 75 or perhaps this is fixed in SVN?
The template std::enable_if_t was introduced to the C++ standard library
in C++14. However sword still builds with -std=c++11, leading to the
above failure.
According to ICU4C configure.ac file [1] and commit 7ec1765ce87c [2] it
seems that ICU 75.1 requires C++17 to build. I suppose this now also
holds for for users for the respective header files.
Best regards,
J
[1]:
https://github.com/unicode-org/icu/blob/release-75-1/icu4c/source/configure.ac#L528-L544
[2]:
https://github.com/unicode-org/icu/commit/7ec1765ce87c32ad250fcdc7362a272e8b44687f
More information about the sword-devel
mailing list