%module cpp11_alias_nested_template_scoping // Test to check a template parameter type is expanded when the template parameter // is used twice in a type name. Expansion was // Y< short >::YYY< T >::value_type > // instead of // Y< short >::YYY< short >::value_type > #if !defined(SWIGCSHARP) && !defined(SWIGJAVA) %feature("flatnested") ZZZ; #endif %inline %{ template<typename T> struct Y { typedef T value_type; typedef Y YY; template<typename T2> using YYY = Y<T2>; template<typename T2> struct ZZZ { typedef T2 another_type; }; value_type create1() const { return T(); } typename Y::value_type create2() const { return T(); } typename Y<T>::value_type create3() const { return T(); } typename YY::value_type create4() const { return T(); } typename Y<T>::YY::value_type create5() const { return T(); } Y<T>::YYY<T>::value_type create6() const { return T(); } typename Y<T>::template ZZZ<T>::another_type create7() const { return T(); } // With global scope prefix typename ::Y<T>::value_type create13() const { return T(); } typename ::Y<T>::YY::value_type create15() const { return T(); } ::Y<T>::YYY<T>::value_type create16() const { return T(); } typename ::Y<T>::template ZZZ<T>::another_type create17() const { return T(); } }; %} %extend Y { %template() YYY<short>; %template() ZZZ<short>; }; // Use above workaround instead of below (which currently gives syntax error) // %template() Y<short>::YYY<short>; %template(Yshort) Y<short>;
Generated by dwww version 1.15 on Tue Jul 2 00:13:58 CEST 2024.