1 module def;
2 
3 
4 int def_a(int i) {
5     return 10;
6 }
7 
8 int def_a(double d){
9     return 20;
10 }
11 
12 int def_a2(int i, double d=4.5) {
13     return cast(int) (100*d + i);
14 }
15 
16 int def_a3(int[] i...) {
17     int ret = 42;
18     foreach(_i; i) ret += _i;
19     return ret;
20 }
21 
22 string def_a4(string s1, int i1, string s2 = "friedman", int i2 = 4, string s3 = "jefferson") {
23     import std.format: format;
24     return format("<'%s', %s, '%s', %s, '%s'>", s1, i1, s2, i2, s3);
25 }
26 
27 int def_t1(T)(T i) {
28     return 1;
29 }
30 
31 template def_t2(T) {
32     int f(T t) {
33         return 1;
34     }
35 }
36 
37 
38 auto def_t1_int(int i) {
39     return def_t1!int(i);
40 }
41 
42 
43 auto def_t2_int(int i) {
44     return def_t2!int.f(i);
45 }
46 
47 
48 long overload(string s) {
49     return s.length;
50 }
51 
52 
53 long overload(int i) {
54     return -i;
55 }