http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55726
--- Comment #4 from vincenzo Innocente <vincenzo.innocente at cern dot ch> 2012-12-19 13:25:16 UTC --- I understand your concern, Marc. I think that the compiler shall either prefer double or produce "error: call of overloaded 'f(float&)' is ambiguous" I'm even more worried of void f(float32x4_t); void f(float32x8_t); what about some sort of c++ "explicit"? I must say that my immediate need come from template functions that could accept any arithmetic AND vector type such as template<typename Float> inline Float atan(Float t) { constexpr float PIO4F = 0.7853981633974483096f; constexpr Float zero = {0}; Float ret = ( t > 0.4142135623730950f ) ? zero+PIO4F : zero; … } where at the moment I need to perform a quite "unnatural" syntactic gymnastic to assign a scalar to either another scalar or to a vector of unknown length. btw I think that altivec supports the assignment of a scalar: I've never tried myself though vector int vi1 = (vector int)(1); // vi1 will be (1, 1, 1, 1). vector int vi2 = (vector int){1}; // vi2 will be (1, 0, 0, 0). vector int vi3 = (vector int)(1, 2); // error vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0). vector int vi5 = (vector int)(1, 2, 3, 4); In any case I find all these "exercises" quite useful to try to converge to a unique vector syntax to propose as standard