Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!gegeweb.org!de-l.enfer-du-nord.net!feeder2.enfer-du-nord.net!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Ian Collins Newsgroups: comp.lang.c++ Subject: Re: Traits in STL Date: Sun, 17 Jul 2011 11:46:55 +1200 Lines: 42 Message-ID: <98em9fFi81U2@mid.individual.net> References: <04673f16-5afd-47f2-9266-e3f4a00fec6a@fv14g2000vbb.googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net FTJzLyIMtIM+bul3rhlctgeOG5Yf1UCLVZoRj6N61jY5fy+OSe Cancel-Lock: sha1:YDkCnEF4fdBP1gaJDha77pxtob8= User-Agent: Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.9.2.9) Gecko/20101021 Lightning/1.0b2 Thunderbird/3.1.4 In-Reply-To: <04673f16-5afd-47f2-9266-e3f4a00fec6a@fv14g2000vbb.googlegroups.com> Xref: x330-a1.tempe.blueboxinc.net comp.lang.c++:7892 On 07/17/11 11:36 AM, Narinder wrote: > Hello > > I am somewhat curious about the reason for the way types in the STL > are dependant on trait classes. For example the template class > basic_string is defined as : > > template class traits = char_traits, > class Allocator = allocator > > > > class basic_string; > > but not as: > > template template class traits_t = char_traits, > template class Allocator_t = allocator> > > > class basic_string > { > typedef traits_t traits; > typedef Allocator_t Allocator; > .... > > > You would think (or perhaps not) that the second approach is less > error prone since it would be less likely that your traits would be > inconsistent with the char type. The only reason I can think of is > that you may have a traits class specifically for char which wouldn't > make sense for any other types and thus wouldn't need to be a > template. In that case you could always write it as template class and > use traits to activate it only for char types. Another reason could be a lot of compilers didn't support template template parameters when the standard was published (as an aside, I don't think template template parameters are used anywhere in the current standard library). Not being able to support std:;string would have been a bit of a problem! -- Ian Collins