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.

Attachment: pgpBvNPnAfGdo.pgp
Description: PGP signature

Reply via email to