This is a feature request for char16_t and char32_t builtin types when compiling as C++0x. I've been meaning to do this since April, 2007. For C++0x library-side, this is a relatively big change in terms of supported API. In particular, numeric_limits, char_traits, basic_string, io, and locale are all impacted. See: Language-side: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2149.html Library-side: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2238.html The library side is a separate issue, but for now just getting the language side in would be useful.
Confirmed.
Patch posted here: http://gcc.gnu.org/ml/gcc-patches/2008-03/msg01474.html
Updated patch based on additional feedback: http://gcc.gnu.org/ml/gcc-patches/2008-03/msg02025.html
Updated patch: http://gcc.gnu.org/ml/gcc-patches/2008-04/msg01235.html
The compiler parts of this are done, or well along in terms of progress. For the library, I think it makes sense to start with _GLIBCXX_USE_CHAR16_T and _GLIBCXX_USE_CHAR32_T configury and macros, and then ease into support with things like numeric_limits and char_traits. -benjamin
Agreed, Benjamin, I'm looking into the first library bits. By the way, both the core and library proposals are now in the working paper (N2461), before that, N2249 superseeded N2149.
(In reply to comment #6) > Agreed, Benjamin, I'm looking into the first library bits. By the way, both the > core and library proposals are now in the working paper (N2461), before that, > N2249 superseeded N2149. I think this really requires libc support.
Parts of it, surely. Not all of it, however.
Sounds great Paolo! I am not working on this.
Subject: Bug 33979 Author: paolo Date: Tue May 20 18:11:34 2008 New Revision: 135668 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=135668 Log: 2008-05-20 Paolo Carlini <paolo.carlini@oracle.com> PR c++/33979 (partial) * include/tr1_impl/functional_hash.h (hash<char16_t>, hash<char32_t>): Add specializations. * include/tr1_impl/type_traits (is_integral<char16_t>, is_integral<char32_t>): Likewise. * include/std/limits (numeric_limits<char16_t>, numeric_limits<char32_t>): Likewise. * src/limits_c++0x.cc: Add. * src/Makefile.am: Update. * testsuite/20_util/hash/requirements/explicit_instantiation.cc: Update. * testsuite/20_util/is_integral/value.cc: New. * testsuite/20_util/is_integral/requirements/typedefs.cc: Likewise. * testsuite/20_util/is_integral/requirements/ explicit_instantiation.cc: Likewise. * testsuite/18_support/numeric_limits/char16_32_t.cc: Likewise. * config/abi/pre/gnu.ver: Export new numeric_limits symbols at GLIBCXX_3.4.11. * configure: Regenerate. * src/Makefile.in: Likewise. * config.h.in: Likewise. Added: trunk/libstdc++-v3/src/limits_c++0x.cc trunk/libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc trunk/libstdc++-v3/testsuite/20_util/is_integral/ trunk/libstdc++-v3/testsuite/20_util/is_integral/requirements/ trunk/libstdc++-v3/testsuite/20_util/is_integral/requirements/explicit_instantiation.cc trunk/libstdc++-v3/testsuite/20_util/is_integral/requirements/typedefs.cc trunk/libstdc++-v3/testsuite/20_util/is_integral/value.cc Modified: trunk/libstdc++-v3/ChangeLog trunk/libstdc++-v3/config.h.in trunk/libstdc++-v3/config/abi/pre/gnu.ver trunk/libstdc++-v3/configure trunk/libstdc++-v3/include/std/limits trunk/libstdc++-v3/include/tr1_impl/functional_hash.h trunk/libstdc++-v3/include/tr1_impl/type_traits trunk/libstdc++-v3/src/Makefile.am trunk/libstdc++-v3/src/Makefile.in trunk/libstdc++-v3/testsuite/20_util/hash/requirements/explicit_instantiation.cc
*** Bug 20410 has been marked as a duplicate of this bug. ***
Subject: Bug 33979 Author: paolo Date: Wed Aug 20 19:29:54 2008 New Revision: 139339 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=139339 Log: 2008-08-20 Paolo Carlini <paolo.carlini@oracle.com> PR libstdc++/33979 (partial) * include/bits/postypes.h (u16streampos, u32streampos): Add. * include/bits/char_traits.h (char_traits<char16_t>, char_traits<char32_t>): Add. * include/bits/stringfwd.h (u16string, u32string): Add. * include/ext/vstring_fwd.h: Add typedefs for char16_t/char32_t. * testsuite/21_strings/char_traits/requirements/char32_t/typedefs.cc: New. * testsuite/21_strings/char_traits/requirements/ explicit_instantiation/short/1.cc: Likewise. * testsuite/21_strings/char_traits/requirements/ explicit_instantiation/char32_t/1.cc: Likewise. * testsuite/21_strings/char_traits/requirements/ explicit_instantiation/wchar_t/1.cc: Likewise. * testsuite/21_strings/char_traits/requirements/ explicit_instantiation/char16_t/1.cc: Likewise. * testsuite/21_strings/char_traits/requirements/ explicit_instantiation/char/1.cc: Likewise. * testsuite/21_strings/char_traits/requirements/char16_t/typedefs.cc: Likewise. * testsuite/21_strings/basic_string/requirements/ explicit_instantiation/char32_t/1.cc: Likewise. * testsuite/21_strings/basic_string/requirements/ explicit_instantiation/wchar_t/1.cc: Likewise. * testsuite/21_strings/basic_string/requirements/ explicit_instantiation/char16_t/1.cc: Likewise. * testsuite/21_strings/basic_string/requirements/ explicit_instantiation/char/1.cc: Likewise. * testsuite/21_strings/headers/string/types_std_c++0x.cc: Likewise. * testsuite/ext/vstring/requirements/explicit_instantiation/ char32_t/1.cc: Likewise. * testsuite/ext/vstring/requirements/explicit_instantiation/ char16_t/1.cc: Likewise. Added: trunk/libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/char/ trunk/libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/char/1.cc trunk/libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/char16_t/ trunk/libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/char16_t/1.cc trunk/libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/char32_t/ trunk/libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/char32_t/1.cc trunk/libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/wchar_t/ trunk/libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/wchar_t/1.cc trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/char16_t/ trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/char16_t/typedefs.cc trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/char32_t/ trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/char32_t/typedefs.cc trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/ trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char/ trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char/1.cc (with props) trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char16_t/ trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char16_t/1.cc trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char32_t/ trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char32_t/1.cc trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/short/ trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/short/1.cc trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/wchar_t/ trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/wchar_t/1.cc (with props) trunk/libstdc++-v3/testsuite/21_strings/headers/string/types_std_c++0x.cc trunk/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char16_t/ trunk/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char16_t/1.cc trunk/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char32_t/ trunk/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char32_t/1.cc Modified: trunk/libstdc++-v3/ChangeLog trunk/libstdc++-v3/include/bits/char_traits.h trunk/libstdc++-v3/include/bits/postypes.h trunk/libstdc++-v3/include/bits/stringfwd.h trunk/libstdc++-v3/include/ext/vstring_fwd.h Propchange: trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char/1.cc ('svn:mergeinfo' added) Propchange: trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/wchar_t/1.cc ('svn:mergeinfo' added)
I think all the front-end parts are fixed now, and only the library part needs to be worked on or is this fully fixed?
Language parts are done for 4.4.0 according to C++0x status. If parts are remaining please detail. For library, numerics/string are done but locale is not in 4.4.0.
In order to make progress on the locale bits while following the usual strategies of v3, we need some support from the underlying glibc, not forthcoming, AFAIK...
It seems the current patch makes char16_t and char32_t keywords. According to the linked specifications, however, those should only be typedefs to the actual keywords, which are _Char16_t and _Char32_t. Those typedefs should be in the file <cuchar>. Note this is the same design as bool/_Bool/<stdbool.h> in C99.
Ignore my previous comment; it seems that was changed since in the current C++0x draft those are indeed keywords.
Should the library support for this be split into a separate bug? Or two bugs, if libstdc++ and glibc both need to handle the new types?
(In reply to Scott A. Colcord from comment #18) > Should the library support for this be split into a separate bug? Or two > bugs, if libstdc++ and glibc both need to handle the new types? I'd want to get an update on whether it's still needed first, or whether it's already been added. If it's still needed, then it'd make sense for a separate libstdc++ bug on this bugzilla (glibc has its own separate bugzilla)
Compiler support for char16_t and char32_t has been complete for many years. The libstdc++ support required by the standard has been complete since GCC 5.1, but I don't know if Paolo had more in mind (we don't implement all locale facets for char16_t and char32_t, which means e.g. std::basic_stringstream<char16_t> doesn't work, but the standard doesn't require it to work).
(In reply to Jonathan Wakely from comment #20) > Compiler support for char16_t and char32_t has been complete for many years. > > The libstdc++ support required by the standard has been complete since GCC > 5.1, but I don't know if Paolo had more in mind (we don't implement all > locale facets for char16_t and char32_t, which means e.g. > std::basic_stringstream<char16_t> doesn't work, but the standard doesn't > require it to work). Changing status to WAITING on Paolo...
I don't have much to add, I'm sure Jonathan will make the best decisions about this issue.
(In reply to Jonathan Wakely from comment #20) > The libstdc++ support required by the standard has been complete since GCC > 5.1, but I don't know if Paolo had more in mind (we don't implement all > locale facets for char16_t and char32_t, which means e.g. > std::basic_stringstream<char16_t> doesn't work, but the standard doesn't > require it to work). We have PR 78486 requesting that (but I have no plans to work on it myself). Let's close this one, everything required by the standard works.