1617a3babSopenharmony_ci#version 400 core
2617a3babSopenharmony_ci
3617a3babSopenharmony_ciin double d;   // ERROR, no doubles
4617a3babSopenharmony_ciin dvec3 d3;   // ERROR, no doubles
5617a3babSopenharmony_ciin dmat4 dm4;  // ERROR, no doubles
6617a3babSopenharmony_ci
7617a3babSopenharmony_ci// function selection under type conversion
8617a3babSopenharmony_civoid foo1(double a, uint b)  {}
9617a3babSopenharmony_civoid foo1(double a, int b)   {}
10617a3babSopenharmony_civoid foo1(double a, float b) {}
11617a3babSopenharmony_civoid foo1(double a, double b){}
12617a3babSopenharmony_ci
13617a3babSopenharmony_civoid foo2(double a, float b) {}
14617a3babSopenharmony_civoid foo2(double a, double b){}
15617a3babSopenharmony_ci
16617a3babSopenharmony_civoid foo3(double a, float b) {}
17617a3babSopenharmony_civoid foo3(float a, double b) {}
18617a3babSopenharmony_ci
19617a3babSopenharmony_civoid ftd(  int,  float, double) {}
20617a3babSopenharmony_civoid ftd( uint,  float, double) {}
21617a3babSopenharmony_civoid ftd(float, double, double) {}
22617a3babSopenharmony_ci
23617a3babSopenharmony_civoid main()
24617a3babSopenharmony_ci{
25617a3babSopenharmony_ci    double d;
26617a3babSopenharmony_ci	uint u;
27617a3babSopenharmony_ci	int i;
28617a3babSopenharmony_ci	float f;
29617a3babSopenharmony_ci
30617a3babSopenharmony_ci	foo1(d, d);
31617a3babSopenharmony_ci	foo1(d, u);
32617a3babSopenharmony_ci	foo1(d, i);
33617a3babSopenharmony_ci	foo1(d, f);
34617a3babSopenharmony_ci
35617a3babSopenharmony_ci	foo1(f, d);
36617a3babSopenharmony_ci	foo1(f, u);
37617a3babSopenharmony_ci	foo1(f, i);
38617a3babSopenharmony_ci	foo1(f, f);
39617a3babSopenharmony_ci
40617a3babSopenharmony_ci	foo1(u, d);
41617a3babSopenharmony_ci	foo1(u, u);
42617a3babSopenharmony_ci	foo1(u, i);
43617a3babSopenharmony_ci	foo1(u, f);
44617a3babSopenharmony_ci
45617a3babSopenharmony_ci	foo1(i, d);
46617a3babSopenharmony_ci	foo1(i, u);
47617a3babSopenharmony_ci	foo1(i, i);
48617a3babSopenharmony_ci	foo1(i, f);
49617a3babSopenharmony_ci
50617a3babSopenharmony_ci	foo2(d, d);
51617a3babSopenharmony_ci	foo2(d, u);
52617a3babSopenharmony_ci	foo2(d, i);
53617a3babSopenharmony_ci	foo2(d, f);
54617a3babSopenharmony_ci
55617a3babSopenharmony_ci	foo2(f, d);
56617a3babSopenharmony_ci	foo2(f, u);
57617a3babSopenharmony_ci	foo2(f, i);
58617a3babSopenharmony_ci	foo2(f, f);
59617a3babSopenharmony_ci
60617a3babSopenharmony_ci	foo2(u, d);
61617a3babSopenharmony_ci	foo2(u, u);
62617a3babSopenharmony_ci	foo2(u, i);
63617a3babSopenharmony_ci	foo2(u, f);
64617a3babSopenharmony_ci
65617a3babSopenharmony_ci	foo2(i, d);
66617a3babSopenharmony_ci	foo2(i, u);
67617a3babSopenharmony_ci	foo2(i, i);
68617a3babSopenharmony_ci	foo2(i, f);
69617a3babSopenharmony_ci
70617a3babSopenharmony_ci	foo3(d, d);  // ERROR, no match
71617a3babSopenharmony_ci	foo3(d, u);
72617a3babSopenharmony_ci	foo3(d, i);
73617a3babSopenharmony_ci	foo3(d, f);
74617a3babSopenharmony_ci
75617a3babSopenharmony_ci	foo3(f, d);
76617a3babSopenharmony_ci	foo3(f, u); // ERROR, ambiguous
77617a3babSopenharmony_ci	foo3(f, i); // ERROR, ambiguous
78617a3babSopenharmony_ci	foo3(f, f); // ERROR, ambiguous
79617a3babSopenharmony_ci
80617a3babSopenharmony_ci	foo3(u, d);
81617a3babSopenharmony_ci	foo3(u, u); // ERROR, ambiguous
82617a3babSopenharmony_ci	foo3(u, i); // ERROR, ambiguous
83617a3babSopenharmony_ci	foo3(u, f); // ERROR, ambiguous
84617a3babSopenharmony_ci
85617a3babSopenharmony_ci	foo3(i, d);
86617a3babSopenharmony_ci	foo3(i, u); // ERROR, ambiguous
87617a3babSopenharmony_ci	foo3(i, i); // ERROR, ambiguous
88617a3babSopenharmony_ci	foo3(i, f); // ERROR, ambiguous
89617a3babSopenharmony_ci
90617a3babSopenharmony_ci	ftd(i, f, f);
91617a3babSopenharmony_ci	ftd(u, f, f);
92617a3babSopenharmony_ci}
93617a3babSopenharmony_ci
94617a3babSopenharmony_civoid itf(int, float, int);
95617a3babSopenharmony_civoid itf(int, double, int);
96617a3babSopenharmony_ci
97617a3babSopenharmony_civoid tf()
98617a3babSopenharmony_ci{
99617a3babSopenharmony_ci    double d;
100617a3babSopenharmony_ci	uint u;
101617a3babSopenharmony_ci	int i;
102617a3babSopenharmony_ci	float f;
103617a3babSopenharmony_ci	
104617a3babSopenharmony_ci	itf(i, i, i);
105617a3babSopenharmony_ci	itf(i, u, i);
106617a3babSopenharmony_ci}
107