Hi, On 2025-07-02 14:01:13 +0700, John Naylor wrote: > On Tue, Jul 1, 2025 at 9:24 PM Tom Lane <t...@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