Hi,
On 2025-07-02 14:01:13 +0700, John Naylor wrote:
> On Tue, Jul 1, 2025 at 9:24 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> > Ha, indeed you are right. On my RHEL9 box, it's kinda drowned out
> > by complaints about
> >
> > /usr/include/c++/11/bits/range_access.h:109:3: error: template with C linkage
> > 109 | template<typename _Tp> _Tp* end(valarray<_Tp>&) noexcept;
> > | ^~~~~~~~
> > /tmp/headerscheck.u5CrRM/test.cpp:1:1: note: ‘extern "C"’ linkage started here
> > 1 | extern "C" {
> > | ^~~~~~~~~~
>
> After pushing my fix, I looked into this, and CI works around this by
> disabling ICU. A proper fix was discussed here, but it trailed off:
>
>
https://www.postgresql.org/message-id/flat/20230311033727.koa4saxy5wyquu6s%40awork3.anarazel.de#03346c63050bbc69dfca8981a5698e4a
>
> I came up with the attached -- Andres, Peter, does this match your recollection?
I think the proper fix here would be to not expose ucol.h to the world,
i.e. not include it from something like pg_locale.h.
> diff --git a/src/include/utils/pg_locale.h b/src/include/utils/pg_locale.h
> index 44ff60a25b4..300c78ba93c 100644
> --- a/src/include/utils/pg_locale.h
> +++ b/src/include/utils/pg_locale.h
> @@ -15,7 +15,12 @@
> #include "mb/pg_wchar.h"
>
> #ifdef USE_ICU
> +/* only include the C APIs, to avoid errors in cpluspluscheck */
> +#undef U_SHOW_CPLUSPLUS_API
> +#define U_SHOW_CPLUSPLUS_API 0
> #include <unicode/ucol.h>
> +/* restore so that extensions can include the C++ APIs */
> +#undef U_SHOW_CPLUSPLUS_API
> #endif
Does the #undef U_SHOW_CPLUSPLUS_API thing actually work, given that ucol.h
presumably won't be included again due to #ifdef protection?
Greetings,
Andres Freund