# Roadmap for 07¶

A major feature in 0.7 is the way operators are implemented. The Vc types now follow the C/C++ standards much closer how types implicitly convert when two different types are used with an operator. Examples for builtin types:

int * unsigned int -> unsigned int float * int -> float float * double -> double

Vc was too picky before 0.7 and OTOH did some implicit conversions that could lead to unexpected results. For example `int_v * float`

would lead to the `float`

getting converted to `int_v`

instead of the `int_v`

getting converted to `float_v`

and the `float`

broadcast to another `float_v`

. I.e. old behavior:

int_v * float_v -> error int_v * float -> int_v int_v * uint_v -> error int_v * unsigned int -> int_v float_v * double -> float_v

The new behavior is now consistent with the behavior of builtin types - or stricter because different vector sizes do not combine

int_v * float_v -> float_v int_v * float -> float_v int_v * uint_v -> uint_v int_v * unsigned int -> uint_v float_v * double -> error (correct would be double_v, but that can't work because float_v::Size != double_v::Size)