azure-sdk-for-cpp/sdk
Sutou Kouhei 6cc8fc195f
Add support for building with ICU 75.1 or later (#6486)
* Add support for building with ICU 75.1 or later

We use ICU via libxml2 implicitly. ICU 75.1 or later require C++17 for
its C++ API:

https://github.com/unicode-org/icu/releases/tag/release-75-1

> C++ code now requires C++17

But we use C++17. So `#include <libxml/xmlreader.h>` with ICU 75.1 or
later causes an error:

    [1/177] Building CXX object sdk/storage/azure-storage-common/CMakeFiles/azure-storage-common.dir/src/xml_wrapper.cpp.o
    FAILED: sdk/storage/azure-storage-common/CMakeFiles/azure-storage-common.dir/src/xml_wrapper.cpp.o
    /bin/c++ -DAZ_RTTI -DBUILD_CURL_HTTP_TRANSPORT_ADAPTER -D_azure_BUILDING_SDK
    -Isdk/storage/azure-storage-common/inc -Isdk/core/azure-core/inc
    -isystem /usr/include/libxml2 -g -std=gnu++14 -fno-operator-names
    -Wold-style-cast -Wall -Wextra -pedantic -Werror -MD
    -MT sdk/storage/azure-storage-common/CMakeFiles/azure-storage-common.dir/src/xml_wrapper.cpp.o
    -MF sdk/storage/azure-storage-common/CMakeFiles/azure-storage-common.dir/src/xml_wrapper.cpp.o.d
    -o sdk/storage/azure-storage-common/CMakeFiles/azure-storage-common.dir/src/xml_wrapper.cpp.o
    -c sdk/storage/azure-storage-common/src/xml_wrapper.cpp
    In file included from /usr/include/unicode/uenum.h:25,
                     from /usr/include/unicode/ucnv.h:52,
                     from /usr/include/libxml2/libxml/encoding.h:31,
                     from /usr/include/libxml2/libxml/parser.h:812,
                     from /usr/include/libxml2/libxml/globals.h:18,
                     from /usr/include/libxml2/libxml/threads.h:35,
                     from /usr/include/libxml2/libxml/xmlmemory.h:218,
                     from /usr/include/libxml2/libxml/tree.h:1307,
                     from /usr/include/libxml2/libxml/xmlreader.h:14,
                     from sdk/storage/azure-storage-common/src/xml_wrapper.cpp:23:
    /usr/include/unicode/localpointer.h:561:26: error: 'auto' parameter not permitted in this context
      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/ucnv.h:597:1: note: invalid template non-type parameter
      597 | U_DEFINE_LOCAL_OPEN_POINTER(LocalUConverterPointer, UConverter, ucnv_close);
          | ^~~~~~~~~~~~~~~~~~~~~~~~~~~

We don't need ICU C++ API. So we can avoid this error by disabling ICU
C++ API by defining `U_SHOW_CPLUSPLUS_API` as `0`.

* Update CHANGELOG
2025-04-02 16:08:40 -07:00
..
appconfiguration Use TokenCredential *const* everywhere (#6453) 2025-03-12 11:57:11 -07:00
attestation Use TokenCredential *const* everywhere (#6453) 2025-03-12 11:57:11 -07:00
core Use TokenCredential *const* everywhere (#6453) 2025-03-12 11:57:11 -07:00
eventhubs GeoDR preparation - EventHubs Offset is a string, not an integer encoded as a string (#6461) 2025-03-27 12:28:15 -07:00
identity Update Identity root README to align with the common format (#6493) 2025-03-31 09:54:19 -07:00
keyvault Keys update (#6491) 2025-03-31 11:16:41 -07:00
storage Add support for building with ICU 75.1 or later (#6486) 2025-04-02 16:08:40 -07:00
tables Add support for building with ICU 75.1 or later (#6486) 2025-04-02 16:08:40 -07:00
template Docs links coversion: docs.microsoft.com -> learn.microsoft.com (#6276) 2024-12-16 09:32:19 -08:00