Elemental headers now require C++11, so we have to deal with C++11. It's worth noting that C++11 is not strictly backward-compatible with C++03. For example, the following is an error with C++11 due to an implicit narrowing conversion.
float foo(float x) {
float a[] = {x-.5, x+.5};
return a[0] + a[1];
}
I haven't tried compiling all of PETSc with C++11 enabled, but I think
we'll encounter the narrowing issue above and have to add some casts.
We can do that, but not so for third-party libraries.
The most compatible choice (in terms of having the compiler accept)
would be to add a "dialect" system so that we can compile matelem.cxx
with C++11 support, but other C++ files with an older standard. The
problem with this is that the C++11 ABI (on most compilers) is not
entirely compatible with the C++98 ABI.
http://gcc.gnu.org/wiki/Cxx11AbiCompatibility
This means that to be safe, all libraries in the stack should be
compiled with -std=c++11. So despite the source compatibility issues, I
think we have to make C++11 a global choice and complain to third
parties if they can't build with it.
I think this means adding a package requirescxx11 and adding compiler
detection for the appropriate flags.
pgpBvNPnAfGdo.pgp
Description: PGP signature
