Boost logo

Boost :

From: Jeremy Siek (jeremy.siek_at_[hidden])
Date: 2006-10-02 09:45:54


Hi Dave,

On Oct 2, 2006, at 4:40 AM, David Abrahams wrote:
> Sure. So, leaving aside that I have the syntax and probably a few
> other things wrong:
>
> template <class T, Sequence<int*> S1, Sequence<T> S2,
> UnaryFunction<T,int*> F>
> void transform(S1 const& src, S2& dst, F f)
>
> typedef std::pair<int*,int*> r;
>
> template <Sequence<int> S1>
> std::pair<int*,int*> f(S1 s)
> {
> r ret;
>
> // treat pair<int*,int*> as a sequence of int*
> concept_map<r, Sequence<int*> >
> {
> ...
> };
>
> transform(s, ret, address());
> }
>
> int storage[2];
> r input = { storage, storage+2 };
>
> // Treat pair<int*,int*> as a sequence of int
> concept_map<r, Sequence<int> >
> {
> ...
> };
>
> // OK?
> r x = f(input);
>
> // which concept does x model?

It's early in the morning, but I'll do my best...

In this outer scope, the type 'r' models Sequence<int>, so
the call to f type checks.

Inside of function f, 'S1' models Sequence<int> and 'r' models
Sequence<int*>.
The call to transform will not type check because the requirement
Sequence<int*> S1 is not satisfied.

Cheers,
Jeremy

__________________________________
Jeremy Siek <siek_at_[hidden]>
http://www.cs.colorado.edu/~siek/
Visiting Assistant Professor
Department of Computer Science
University of Colorado at Boulder


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