From b06a1ea51f22f7200b36f8bf9beda210e0a5370f Mon Sep 17 00:00:00 2001
From: Jonathan Wakely That's the theory. Remember however that basic_string has additional
type parameters, which take default arguments based on the character
type (called CharT here):
-
+
template <typename CharT, typename Traits = char_traits<CharT>, typename Alloc = allocator<CharT> > class basic_string { .... };- Now,
allocator<CharT>
will probably Do The Right
- Thing by default, unless you need to do something very strange with
- memory allocation in your characters.
+ Now, allocator<CharT>
will probably Do The Right
+ Thing by default, unless you need to implement your own allocator
+ for your characters.
But char_traits
takes more work. The char_traits
template is declared but not defined.
That means there is only
-
+ +template <typename CharT> struct char_traits { static void foo (type1 x, type2 y); ... };- and functions such as char_traits<CharT>::foo() are not +and functions such as char_traits<CharT>::foo() are not actually defined anywhere for the general case. The C++ standard permits this, because writing such a definition to fit all possible CharT's cannot be done. (For a time, in earlier versions of GCC, -- 2.30.2