Will r6484 really work with Trilinos?  I'm not saying it's a dumb
idea, but I literally just tried to do the same thing for CppUnit this
morning, only to discover why it's doomed to fail in many cases:

If you try to turn on _GLIBCXX_DEBUG for libMesh headers and turn it
off for Trilinos (or in my case CppUnit) headers, there's *still* only
going to be one expansion of the header-guarded STL files: e.g. if
libMesh-headers-which-include-vector are included first, then
std::vector is defined to be a debug vector.  Then when
Trilinos-headers-which-include-vector are included afterwards, that
won't redefine a non-debug vector for that code, it will just hit the
header guards, it won't re-include the same header twice, the result
is equivalent to what already happens when we compile against Trilinos
headers with our DEBUG flags turned on, and it will still give
segfaults in Trilinos code when the mismatch is hit.  Include the
Trilinos headers before the libMesh headers instead, and you just get
the segfaults triggered in libMesh code instead.

The only way around this seems to be total separation: use the pImpl
idiom in such a way that no code ever needs to include both Trilinos
and libMesh headers and no STL containers ever pass from one to the
other.  This is basically impossible with CppUnit (way too many macros
would need fragile shims), and nearly impossible with Trilinos (most
of our NumericVector APIs use std::vector explicitly and would need
ugly shim code to turn a debug-vector into a non-debug-vector via a
lower-level intermediary).
---
Roy

------------------------------------------------------------------------------
Keep yourself connected to Go Parallel: 
BUILD Helping you discover the best ways to construct your parallel projects.
http://goparallel.sourceforge.net
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to