1 %module template_forward
5 template<class T> class bar { };
10 template<class T> class bar;
15 double test1(const bar<double> &x) { return 0; }
25 // Forward declarations
26 template<class RangeScalar, class DomainScalar = RangeScalar> class LinearOpBase;
27 template<class Scalar> class VectorBase;
39 template<class RangeScalar, class DomainScalar>
40 class LinearOpBase : virtual public Describable {
43 }; // end class LinearOpBase<RangeScalar,DomainScalar>
46 template<class Scalar>
47 class VectorBase : virtual public LinearOpBase<Scalar>
50 using LinearOpBase<Scalar>::describe;
51 }; // end class VectorBase<Scalar>
56 %template (LinearOpBase_double) LinearOpBase<double>;
57 %template (VectorBase_double) VectorBase<double>;
58 %template (LinearOpBase_int) LinearOpBase<int,int>;
59 %template (VectorBase_int) VectorBase<int>;
61 // Template forward class declarations mixing class and typename without always naming the templated parameter name
63 template <class> class TClass1;
64 template <typename> class TClass2;
65 template <class, typename> class TClass3;
66 template <class, class, class> class TClass4;
67 template <typename, typename> class TClass5;
68 template <typename, class K = double> class TClass6;
69 template<typename, class K, class C = K> class TClass7;