Boost logo

Boost :

Subject: Re: [boost] [type_erasure] Review started (July 18-27, 2012)
From: Paul A. Bristow (pbristow_at_[hidden])
Date: 2012-08-08 12:40:05


> -----Original Message-----
> From: boost-bounces_at_[hidden] [mailto:boost-bounces_at_[hidden]] On Behalf Of Steven
> Watanabe
> Sent: Wednesday, August 08, 2012 3:29 PM
> To: boost_at_[hidden]
> Subject: Re: [boost] [type_erasure] Review started (July 18-27, 2012)
>
> AMDG
>
> On 08/08/2012 02:09 AM, Paul A. Bristow wrote:
> >
> > namespace boost {
> > namespace type_erasure {
> >
> > // Partial specialization of struct ostreamable:
> > template<class Os>
> > struct ostreamable<Os, std::pair<const int, double> >;
> >
> > } // namespace type_erasure
> > } // namespace boost
> >
> > looks more promising but still fails inside the magic of type_erasure.
> >
>
> You still need the definition. I only
> posted the declaration because
> the body of the specialization that
> you had looked okay.

Ah yes - of course.

This now works fine (templated too) provided the function

template <typename T1, typename T2>
std::ostream& operator<< (std::ostream& os, const std::pair<T1, T2>& p)
{ ...}

lives in namespace boost::type_erasure.

But really I'd like it to live in my_detail namespace or it will be confusing for other uses outside
type_erasure/any things.

putting the operator<< for pair in namespace my_detail and

        using my_detail::operator<<;

in namespace boost::type_erasure before the partial specialization of ostreamable seems to permit
this.

Even more than often, when using boost::type_erasure, namespace issues seem likely to be an
unwelcome complication and source of puzzling behaviour :-(

Perhaps some warnings for the unwary might be helpful. For one example, I was confused at first by
having the same name like any and tuple in more than one namespace.

Many thanks

Paul

PS I haven't found the docs on ostreamable

Error 503 Service Unavailable
Service Unavailable
Guru Meditation:
XID: 731432893
Varnish cache server

No doubt a release will provide.

ostreamable will, no doubt, be a very popular requirement. Examples will be invaluable, perhaps
links to the \tests\test_stream.cpp (for example) might be a quick way of providing many more
examples?

PPS The error messages a dreadfully inscrutable :-( I've not even found the line number causing the
problem in many cases. But perhaps that is inevitable?

---
Paul A. Bristow,
Prizet Farmhouse, Kendal LA8 8AB  UK
+44 1539 561830  07714330204
pbristow_at_[hidden]
 

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk