From: SourceForge.net <no...@so...> - 2008-03-28 15:26:16
|
Bugs item #1928048, was opened at 2008-03-28 16:26 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101645&aid=1928048&group_id=1645 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: python Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: G Uddeborg (goeran) Assigned to: Nobody/Anonymous (nobody) Summary: Template instances generates incorrect C++ Initial Comment: Description =========== When generating interface for an instance of for example list<...>, the resulting C++ code fails to compile on AIX. The reason is that a member function asptr of a class template traits_asptr_stdseq calls SWIG_Python_ConvertPtrAndOwn. The latter function is static. And according to section 14.6.4.2 the standard, only functions with external linkage are considered for lookup of unqualified names. To repeat ========= 1. Create a file y.i with this content: %module y %include "std_list.i" %template(IntList) std::list<int>; 2. Process with swig: swig -c++ -python y.i 3. Compile with the AIX compiler: xlC -qrtti=all -I /usr/local/include/python2.4 -c y_wrap.cxx The compiler gives the following error messages: "y_wrap.cxx", line 3898.13: 1540-0274 (S) The name lookup for "SWIG_Python_ConvertPtrAndOwn" did not find a declaration. "y_wrap.cxx", line 3898.13: 1540-1292 (I) Static declarations are not considered for a function call if the function is not qualified. "y_wrap.cxx", line 3895.16: 1540-0700 (I) The previous message was produced while processing "swig::traits_asptr_stdseq<std::list<int,std::allocator<int> >,int>::asptr(PyObject *, sequence **)". "y_wrap.cxx", line 3963.16: 1540-0700 (I) The previous message was produced while processing "swig::traits_asptr<std::list<int,std::allocator<int> > >::asptr(PyObject *, std::list<int,std::allocator<int> > **)". "y_wrap.cxx", line 3069.14: 1540-0700 (I) The previous message was produced while processing "swig::asptr<std::list<int,std::allocator<int> > >(PyObject *, list<int,std::allocator<int> > **)". "y_wrap.cxx", line 5288.12: 1540-0700 (I) The previous message was produced while processing "_wrap_new_IntList__SWIG_1(PyObject *, PyObject *)". Notes ===== The AIX compiler is the only one I've seen actually enforcing the restriction en section 14.6.4.2. One way to solve the problem would be to make the name qualified by simply prepending :: to the name. See the attachement for the modifications I made to 1.3.34 to make this work for Python. Presumably, similar changes will need to be done for other examples and other target languages if you choose this solution. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101645&aid=1928048&group_id=1645 |