
Davide Del Vento wrote:
Thanks for your message!
xlc and xlC are the IBM's compilers for c and c++ respectively. They do support several standards: http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=/co...
and sometimes are more nitpicking than gcc about the standards, as I believe it's happening here. Anyway, I was able to remove several of those errors with the enclosed patch. Can you please have a look at it just to be sure that I didn't change what ppl was supposed to do? Unfortunately, though, the problem is NOT solved, since there are other (possibly similar) problems that you can see in the make.log Do you have any clue about them?
All of the changes in your patch have to do with a single name lookup issue. Namely, the IBM compiler seems unable to compile the following
/* ========================= */ namespace Namespace { class Base {}; // Definition. class Derived; // Forward declaration. }
class Namespace::Derived // Definition. : public Base { typedef Base base_type; } /* ========================= */
If I have understood, it claims that there is no accessible declaration for `Base'. This is really strange ... I really don't think that we are using extensions of gcc, rather I suspect that the IBM compiler is just wrong.
Looking to name lookup rules in the C++ standard (14882-1998), one can see the following example in section 3.4.1(8) (unqualified name lookup, pages 30-31):
=============================== [Example: class B { }; namespace M { namespace N { class X : public B { void f(); }; } } void M::N::X::f() { i = 16; }
// The following scopes are searched for a declaration of i: // 1) outermost block scope of M::N::X::f, before the use of i // 2) scope of class M::N::X // 3) scope of M::N::X’s base class B // 4) scope of namespace M::N // 5) scope of namespace M // 6) global scope, before the definition of M::N::X::f —end example] ===============================
In points 4 and 5 it is said that the unqualified name (i) is also searched in the scope of the enclosing namespaces (here M::N and M). Hence, in our simpler example above, `Base' should also be searched inside `Namespace'.
According to the make.log contents, it is not just a matter of the names of base classes when using inheritance ... and we cannot reasonably change *all* the uses of unqualified names in the PPL sources to become qualified names (that is, add Parma_Polyhedra_Library:: everywhere even if not needed).
Are you using the latest available version of the compiler? I am asking because it seems there has been bug corrections regarding name lookup issues last June:
http://www-01.ibm.com/support/docview.wss?uid=swg24023988
Cheers, Enea Zaffanella.
Compiling with gcc is possible, but there will be several linking problems with other libraries that I eventually need to link together (gcc binaries are not-linkable with xlC binaries).
Thanks again Davide Del Vento, Consulting Services Software Engineer NCAR Computational & Information Services Laboratory http://www.cisl.ucar.edu/hss/csg/ office: Mesa Lab, Room 42B phone: (303) 497-1233 mobile: (720) 240-1704 email: ddvento@ucar.edu