diff --git a/Lib/python/pyiterators.swg b/Lib/python/pyiterators.swg index a3b033e01..29c388ee1 100644 --- a/Lib/python/pyiterators.swg +++ b/Lib/python/pyiterators.swg @@ -168,8 +168,7 @@ namespace swig { } } -%fragment("PySwigIterator_T","header",fragment="StdTraits") { -%#include +%fragment("PySwigIterator_T","header",fragment="StdTraits",fragment="StdIteratorTraits") { namespace swig { template diff --git a/Lib/std/std_common.i b/Lib/std/std_common.i index 7a932d758..54ba18642 100644 --- a/Lib/std/std_common.i +++ b/Lib/std/std_common.i @@ -11,12 +11,12 @@ // Here, we identify compilers we now have problems with STL. %{ -#if defined(__SUNPRO_CC) +#if defined(__SUNPRO_CC) && defined(_RWSTD_VER) #define SWIG_STD_NOASSIGN_STL #define SWIG_STD_NOINSERT_TEMPLATE_STL +#define SWIG_STD_NOITERATOR_TRAITS_STL #endif - #if defined(__GNUC__) # if __GNUC__ == 2 && __GNUC_MINOR <= 96 # define SWIG_STD_NOMODERN_STL @@ -36,9 +36,23 @@ %} +%fragment("StdIteratorTraits","header") %{ +#if !defined(SWIG_STD_NOITERATOR_TRAITS_STL) +#include +#else + template + struct iterator_traits { + typedef typename Iterator::value_type value_type; + }; -%fragment("StdTraitsCommon","header") -%{ + template + struct iterator_traits { + typedef T value_type; + }; +#endif +%} + +%fragment("StdTraitsCommon","header") %{ namespace swig { template struct noconst_traits {