| Jon Stewart on 17 May 2003 02:53:01 -0000 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: [ALACPP] Chris' stupid C++ trick of the week |
> So, aside from this being a tad ugly and not actually guaranteed to work
> (although I guess from a practical standpoint you can assume the
> function will always inline), this would likely work for the case where
Hmm. You seem to have nailed my brand of code right off the bat. A tad
ugly, and not actually guaranteed to work. :-)
> the "return" is purely for purposes of syntactic sugar, however, for the
> case I mentioned with the returned ref *may or may not be* the same as
> the ref argument, this will not work. Again a trivial example (you'd
> need code more complex than this to convince most compilers not to
> inline):
>
> template<typename T>
> T& doFoo(T& foo) {
> static T PIVOT(foo);
>
> return (foo < PIVOT) ? foo : PIVOT;
> }
>
> The idea is that for cases where the logic of what to return is
> intrinsic to the actual "doing of foo", it would be difficult to
> separate it from the core behavior of the function enough to be able to
> force inlining as you've described.
Yes. Breaking const correctness is too evil for words(*). Hiding copy
constructors would be the way to go.
If there were some stupid little way to manipulate the parameter as an
r-value in a way that would only work for references, then that would make
the compiler sit down. But I can't think of anything.
I'll read some Stroustrup...
Jon
* Also: my code is always const correct, even if it shouldn't be.
--
Jon Stewart
stew1@xxxxxxxxxxx
_______________________________________________
alacpp mailing list
alacpp@xxxxxxxxxxx
http://lists.ellipsis.cx/mailman/listinfo/alacpp