PromotionTraits is a technique which enables the return type of a function to be determined by the function arguments. This is described in CppTemplatesTheCompleteGuide, where working code is given. -- JohnFletcher ---- '''Example of function definition''' template typename Promotion::ResultT operator+ ( T1 const &, T2 const &); ---- A word of warning. Use of this can have side effects. I have had a problem where code to do with standard vectors would not work correctly and this turned out to be due to picking up an incorrect operator+. If '''V''' is a vector then '''V[n]''' is implemented for GnuCpp using '''*(V.begin()+n)''' which involves addition to the iterator. -- JohnFletcher Does it touch such issues as subclasses of a common super-class (and finding most-derived common superclass)? That gets to be pretty damn difficult, though doable if you design specializations that indicate all superclasses of a class. ---- Related to OperatorOverloading ---- '''April 2012''' Now that CeePlusPlusEleven is available I am planning to phase out use of this as soon as possible in favour of '''auto''' and '''decltype''' which can do a better job as there is no need to set up macros for the cases needed. The only case I cannot solve so far is one involving VariadicTemplates. -- JohnFletcher ---- (For those interested, an example of the above using C++11:) template auto operator+(const T1& l, const T2& r) -> decltype(l + r); ---- CategoryCppTemplates CategoryCpp