|
Boost : |
From: Samuel Krempp (krempp_at_[hidden])
Date: 2003-09-09 23:36:26
le Mercredi 10 Septembre 2003 05:54, lorgon_at_[hidden] écrivit :
>> it fails for other manipulators too.
>> that's because you cant pass functions by const reference.
>
> Is this the real reason? (see below)
no, you're right about endl. I had forgotten endl was not like the other
manipulators.
this point still holds for other manipulators though (showbase, etc..)
> Does this work? (I confess I have not tried it.) I thought the real
no, not for endl..
> reason for the manipulator failure had to do with the fact that
> std::endl
> is not the name of a C++ object. Rather it's the name of a template
> function, and obscure C++ type system rules allow such a name to be
> coerced into a pointer to a single instance of the template function,
> provided there is sufficient external context information available.
>
> I have run into this problem in other contexts, and I have never been
> able to capture "endl" using a "template <class T>" parameter.
True.
>> 2. or by overloading it for the 3 following types to catch all 3 kinds of
>> manipulators :
>>
>> ios_base& (*pfn)(ios_base&)
>> basic_ostream<Elem,Tr> & (*pfn)(basic_ostream<Elem, Tr>&)
>> basic_ios<Elem, Tr>& (*pfn)(basic_ios<Elem, Tr>&)
>>
>> (just like std::basic_ostream :: operator<< 's overloads)
>
> I think this is the only way that truly works.
and the mechanism that makes endl instantiate in this context still is
somekind of a mystery to me...
-- Samuel
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk