Description of problem: Look at <qvaluestack.h> header: here is template of class QValueStack<T> declared, which uses QValueList<T> as base class. In line 58 of <qvaluestack.h> (body of QValueStack<T>:pop function) is call for QValueList<T>::remove function. But this call is done just by name, i.e. remove, while full QValueList<T>::remove is needed for ISO C++ compatibility. Look at section 14.6.2 (Dependent names), paragraph 3,4 of C++ standards: 3 In the definition of a class template or in the definition of a member of such a template that appears outside of the template definition, if a base class of this template depends on a templateparameter, the base class scope is not examined during name lookup until the class template is instantiated. [Example: typedef double A; template<class T> B { typedef int A; }; template<class T> struct X : B<T> { A a; // a has type double }; The type name A in the definition of X<T> binds to the typedef name defined in the global namespace scope, not to the typedef name defined in the base class B<T>. ] 4 If a base class is a dependent type, a member of that class cannot hide a name declared within a template, or a name from the templates enclosing scopes. Following standards if I have some function remove in global scope (as it happens, because global remove is declared in <stdio.h>), it will be assumed for call, and therefore arguments passed in <qvaluestack.h> wont be accepted for it and ISO C++ compatible compiler will generate error. GNU C++ accept very wide code violating for example section 14.6.2, paragraphs 3,4 of standards; but to increase Red Hat Linux portability you should use only standard C++ compatible code, especially in system headers. For making <qvaluestack.h> ISO C++ compatible you should call remove function with base class prefix, i.e. as QValueList<T>::remove. Ill attach the patch which doing such change for qt3 package. Version-Release number of selected component (if applicable): How reproducible: Every time Steps to Reproduce: 1. You wont be able to reproduce the error because dont have strict enough compiler I use. Actual results: compilation error: /users/compiler/tc_t/WORK_DIR/BUILD/qt-x11-free-3.0.5/include/qvaluestack.h (58): error: no suitable conversion function from "QVal ueList<int>::iterator" to "const char *far" exists remove( this->fromLast() ); ^ detected during instantiation of "T QValueStack<T>::pop() [with T=int]" Expected results: Successful compilation Additional info:
Created attachment 88755 [details] Patch which doing code in <qvaluestack.h> ISO C++ compatible
qt-3.1.1-3 has this fix. Thanks