From
Bug 1394505:
f you build with -std=c++11 (or any other strict ISO mode) and include altivec.h, that is to be expected, altivec.h redefines bool and vector for the Altivec purposes, so if you want to use it in C++ code, you need to include altivec.h after all STL headers and if you want to use bool/vector the way it is used normally in C++, you need to #undef them afterwards. In -std=gnu++11 and other GNU modes GCC uses conditional preprocessor macros that act as the Altivec macros in certain contexts and as normal C++ bool/vector in other contexts.
I don't find the answer very satisfying. Since it compiles on everything except PowerPC, something is including altivec.h on that platform. I have no idea what. Even if I found it and moved everything so that altivec.h is included last, someone could decide they need altivec in a library I use and break the build again. So I'm stuck using gnu++11.