This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/55726] assignment of a scalar to a vector
- From: "vincenzo.innocente at cern dot ch" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 19 Dec 2012 13:25:16 +0000
- Subject: [Bug c++/55726] assignment of a scalar to a vector
- Auto-submitted: auto-generated
- References: <bug-55726-4@http.gcc.gnu.org/bugzilla/>
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