These template classes and functions are permitted unusual latitude in the interest of improved performance. Specifically, any function returning type valarray<T1> may return an object of some other type T2. In that case, any function that accepts one or more arguments of type valarray<T2> must have overloads that accept arbitrary combinations of those arguments, each replaced with an argument of type T2.