| Christopher Smith on 17 May 2003 04:20:01 -0000 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: [ALACPP] Chris' stupid C++ trick of the week |
On Fri, 2003-05-16 at 20:23, arlo@xxxxxxxxx wrote:
> > template<typename T>
> > T& doFoo(T& aTarget) {
> > //do something with aTarget
> > return aTarget;
> > }
>
> Actually, upon looking at this code a bit more, I found a more problematic
> error. What if the template is specialized with int&?
>
> The reference to reference problem is actually the one that the boost lib
> is trying to solve. However, the same mechanism (or one layering on top if
> it) can also solve the problem that you asked about.
It strikes me that the reference-to-reference problem is much less
likely to occur without a great deal of explicitness on the callers
part. That is the real source of my concern with the original problem:
the "surprise" factor. So, while you can create the problem you are
talking about with something on the order of:
bar = doFoo<MyClass&>(baz);
If you are going to explicitly instantiate template parameters on my
function, I expect you to understand how the template expands in a crazy
way.
Whereas, if you just do:
bar = doFoo(baz);
I can't imagine types for baz and bar which would cause the compiler to
select the double reference case.
--Chris
_______________________________________________
alacpp mailing list
alacpp@xxxxxxxxxxx
http://lists.ellipsis.cx/mailman/listinfo/alacpp