https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100703
Bug ID: 100703 Summary: __vector_pair and __vector_quad cannot be passed by reference Product: gcc Version: 10.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: alexander.gr...@tu-dresden.de Target Milestone: --- The PowerPC intrinsic types __vector_pair and __vector_quad cannot be passed by reference but only by pointer. Reproducer code: void ploadRhsMMA(__vector_pair&){} int main(){ __vector_pair p; ploadRhsMMA(p); } This creates an error "invalid conversion from type »* __vector_pair«" This error looks wrong to me: Why wouldn't I be able to pass a type by reference when I can pass it by pointer? GCC can handle both the same so it is at least inconsistent. Furthermore this breaks the commonly used assumption, that the following functions can take any argument: template<typename T> void foo(T&&); template<typename T> void bar(const T&); This now breaks for those intrinsics and a workaround is painful as everything needs to be covnerted to pointers when those are part of an overload set (for example)