aboutsummaryrefslogtreecommitdiff
path: root/Examples/test-suite/template_specialization_defarg.i
blob: 1216ab09c0aeb590575fcbc10009086b157a1146 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
%module template_specialization_defarg

%warnfilter(SWIGWARN_TYPE_REDEFINED) C<double, double>; // note that warning is actually for the equivalent C<double.

%inline %{

  template <class A, class B = double>
    struct C
    {
    };
  
  
  template <class BB>
    struct C<int , BB> 
    {
      int hi()
      {
	return 0;
      }

      C(int a)
      {
      }
      
    };
  

  template <class BB>
    struct C<double , BB> 
    {
      int hello()
      {
	return 0;
      }
      
      C(double a)
      {
      }
      
    };

  template <class T>
    struct Alloc 
    {
    };
  

  template <class T, class A = double >
    struct D
    {
      D(int){}
    };


  template <>
    struct D<double>
    {
      D(){}
      int foo() { return 0; }
    };
  
      
  
  template <class T, class A = Alloc<T> >
    struct Vector
    {
      Vector(int){}
    };


  template <>
    struct Vector<double>
    {
      Vector(){}
      int foo() { return 0; }
    };
  
      
%}


//
// This works fine
//
%template(C_i) C<int, double>;

//
// This one fails
//
%template(C_dd) C<double,double>;
%template(C_d) C<double>;

%template(D_i) D<int>;
%template(D_d) D<double>;

%template(Vector_i) Vector<int>;
%template(Vector_d) Vector<double, Alloc<double> >;