Update: Rather surprisingly (to me, at least) this doesn't seem to break binaries that are linked against libxerces-c. I expected that changing the underlying type of XMLCh would change the name mangling in a way that would case link errors.
Regards, Tom On Wed, Sep 24, 2014 at 4:16 PM, Tom Cook <tom.k.c...@gmail.com> wrote: > For those who come after me, rebuilding libxerces-c using char16_t is > relatively easy. Here's how I did it on Ubuntu 14.04: > >> apt-get source libxerces-c3.1 >> cd xerces-c-3.1.1 > > edit configure.ac to apply this patch: > 289c289 > < xerces_cv_type_xmlch=$xerces_cv_type_u16bit_int > --- >> xerces_cv_type_xmlch=char16_t > >> export DEB_CXXFLAGS_SET="-std=c++11 -fPIC" >> dpkg-buildpackage -rfakeroot -b > > Whether installing such a package is a good thing for your system or > not is another matter, since I guess it will break binary > compatibility between libxerces-c and anything else that depends on > it; I haven't been game to reboot my system yet. > > Regards, > Tom > > On Fri, Sep 19, 2014 at 8:06 PM, Tom Cook <tom.k.c...@gmail.com> wrote: >> Thanks for responding. >> >> Yes, use of C++11 char16_t would mean that various compilers would >> become unsupported (ie GCC support would change from 3.4.x+ to 4.5+). >> >> I've just tried this patch on configure.ac: >> >> 289c289 >> < xerces_cv_type_xmlch=$xerces_cv_type_u16bit_int >> --- >>> xerces_cv_type_xmlch=char16_t >> >> but the results are more-or-less disastrous (haven't had a chance to >> look into the errors in detail yet). Is that the right way to try >> changing the type of XMLCh? >> >> Thanks, >> Tom >> >> On Fri, Sep 19, 2014 at 5:50 PM, Alberto Massari >> <albertomass...@tiscali.it> wrote: >>> There are no plans to use C++11 features in Xerces, especially if this would >>> make any of the supported compilers to become unsupported. >>> But you can make a test to see if char16_t literals are encoded in the same >>> format as XMLCh expects... >>> >>> Alberto >>> >>> Il 19/09/14 08:56, Tom Cook ha scritto: >>> >>>> No response to this so far. Am I better off rebuilding Xerces-C with >>>> XMLCh typedef'd to char16_t? >>>> >>>> Regards, >>>> Tom >>>> >>>> On Mon, Sep 15, 2014 at 4:16 PM, Tom Cook <tom.k.c...@gmail.com> wrote: >>>>> >>>>> Hi, >>>>> >>>>> I've googled around and found this question asked in quite a few >>>>> places, but not any answer to it. >>>>> >>>>> What is the best way of handling strings, and particularly string >>>>> literals, in portable code? >>>>> >>>>> Specifically, I'm interested in building code with VC++ 2013 on >>>>> Windows and G++ 4.8 on Linux. On Windows, the Xerces binary build >>>>> uses wchar_t as the character type, and so, naturally enough, people >>>>> on Windows write code that passes around wchar_t. Unfortunately, G++ >>>>> has a 4-byte wchar_t and so Xerces uses unsigned short int (or >>>>> uint16_t) as its character type. This causes all such code written >>>>> for Windows to break in fairly horrible ways on Linux, and in ways >>>>> that require wide-ranging code changes to fix. >>>>> >>>>> So far, the best solution I've come up with looks something like this: >>>>> >>>>> #if defined _MSC_VER >>>>> #define U16S(x) L##x >>>>> typedef wchar_t my_u16_char_t; >>>>> typedef std::wstring my_u16_str_t; >>>>> typedef std::wstringstream my_u16_stream_t; >>>>> inline XmlCh* XmlString(my_u16_char_t* s) { return s; } >>>>> inline XmlCh* XmlString(my_u16_str_t* s) { return s.c_str(); } >>>>> #elif defined __linux >>>>> #define U16S(x) u##x >>>>> typedef char16_t my_u16_char_t; >>>>> typedef std::basic_string<char16_t> my_u16_str_t; >>>>> typedef std::basic_stringstream<char16_t> my_u16_stream_t; >>>>> inline XmlCh* XmlString(my_u16_char_t* s) { return >>>>> reinterpret_cast<char16_t*>(s); } >>>>> inline XmlCh* XmlString(my_u16_str_t* s) { return XmlString(s.c_str()); } >>>>> #endif >>>>> >>>>> But of course this still requires major code changes for existing code >>>>> that uses wchar_t. >>>>> >>>>> Is there a better way of sorting this out? C++11 now has a distinct, >>>>> UTF-16-encoded character type, char16_t. Is there any plan to make >>>>> Xerces use it? >>>>> >>>>> Thanks, >>>>> Tom >>> >>> >>> >>> -- >>> ----------------------------------------- >>> Lucia Riccardi & Alberto Massari >>> Via Prasca 19/5 >>> 16148 Genova >>> Italia >>> Tel.: (010) 3771653 >>> E-mail: lucia_albe...@libero.it >>> Web: http://www.massari.org >>>