This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Specializations of std::char_traits


On Wednesday, July 16, 2003, at 11:11AM, Nathan Myers wrote:

On Tue, Jul 15, 2003 at 04:39:04PM -0700, Matt Austern wrote:
We've received several complaints from customers who noticed that
std::char_traits<int> (or long, or signed char, or unsigned short, or
whatever) used to be defined but isn't defined anymore.

Now, just to be obvious, I realize that
 - The C++ standard doesn't say there should be any specializations
other than char and wchar_t
 - In general there's no way to define all of the members of
std::char_traits for an arbitrary type.  There's no good way to say
what char_traits<T>::int_type should be, for example.

As I recall, the standard requires a default definition of char_traits<T> for any T. (I recall the vote in favor, which I opposed, if mildly.)

Yes and no. There must be a class template std::char_traits<T> (there has to be a primary template to specialize!), but I don't see anything in the standard saying that the primary template has to have any of the members found in table 37. In fact, I'm not even convinced there's a requirement that the primary template has to be instantiable.

The standard is quite explicit about the member functions in the
std::char_traits<char> and std::char_traits<wchar_t> specializations
(clauses 21.1.3.1 and 21.1.3.2), but I believe users are entirely on
their own if they try to instantiate std::char_traits for any other types.


I suggest that we should have a semi-useful primary template.
However, I also suggest that this primary template should define
only some of the members that the specializations do.  I don't think
there's any useful definition of std::char_traits<T>::state_type for
arbitrary T, for example.  Ditto for eof(), pos_type, and everything
that has to do with int_type.

--Matt


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]