
No I mean any idea about
template<typename T> param_type { .... };
Shouldn't we deprecate call traits if(once) we have corresponding traits in Traits_lib.
Or possibly deprecate param_type ;-) On most modern machines the difference between passing small types by reference and by value is negligible, the main use is to prevent aliasing (similar to C99's restrict keyword): void f(T& a, const T& b) { while(condition) { // do something with b here } } In a situation like this b gets reloaded from memory with each pass through the loop (because it may be aliased by a), whereas this does not occur with pass-by-value, and even then you may be better off with just: void f(T& a, const T& b) { T t(b); while(condition) { // do something with t here } } or: void f(T& a, const T& b) { register typename some_heuistic<T>::type t(b); while(condition) { // do something with t here } } Where some_heuistic is specific to your algorithm, but is similar to param_type. If you still want param_type, then given that 90% plus of the code in call_traits.hpp is there to implement param_type, why not just use call_traits if that's what you want? John.