1// 2002-08-02 gdr
2
3// Copyright (C) 2002, 2003, 2009 Free Software Foundation, Inc.
4//
5// This file is part of the GNU ISO C++ Library.  This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 3, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING3.  If not see
18// <http://www.gnu.org/licenses/>.
19
20
21// Test name lookup resolutions for standard functions applied to an
22// array expression.
23// { dg-do compile }
24
25#include <valarray>
26
27namespace My
28{
29  struct Number
30  {
31    operator bool() const;
32  };
33
34  Number operator+(Number);
35  Number operator-(Number);
36  Number operator~(Number);
37
38  bool operator!(Number);
39
40  Number operator+(Number, Number);
41  Number operator-(Number, Number);
42  Number operator*(Number, Number);
43  Number operator/(Number, Number);
44  Number operator%(Number, Number);
45
46  Number operator^(Number, Number);
47  Number operator&(Number, Number);
48  Number operator|(Number, Number);
49
50  Number operator<<(Number, Number);
51  Number operator>>(Number, Number);
52
53  bool operator==(Number, Number);
54  bool operator!=(Number, Number);
55  bool operator<(Number, Number);
56  bool operator<=(Number, Number);
57  bool operator>(Number, Number);
58  bool operator>=(Number, Number);
59
60  Number abs(Number);
61
62  Number cos(Number);
63  Number cosh(Number);
64  Number acos(Number);
65
66  Number sin(Number);
67  Number sinh(Number);
68  Number asin(Number);
69
70  Number tan(Number);
71  Number tanh(Number);
72  Number atan(Number);
73
74  Number exp(Number);
75  Number log(Number);
76  Number log10(Number);
77  Number sqrt(Number);
78
79  Number atan2(Number, Number);
80  Number pow(Number, Number);
81}
82
83int main()
84{
85  typedef std::valarray<My::Number> Array;
86  Array u(10), v(10);
87  v = +u;
88  v = -u;
89  v = ~u;
90  std::valarray<bool> z = !u;
91
92  v = abs(u);
93
94  v = cos(u);
95  v = cosh(u);
96  v = acos(u);
97
98  v = sin(u);
99  v = sinh(u);
100  v = asin(u);
101
102  v = tan(u);
103  v = tanh(u);
104  v = atan(u);
105
106  v = exp(u);
107  v = log(u);
108  v = log10(u);
109  v = sqrt(u);
110
111  Array w = u + v;
112  w = u - v;
113  w = u * v;
114  w = u / v;
115  w = u % v;
116
117  w = u ^ v;
118  w = u & v;
119  w = u | v;
120
121  w = u << v;
122  w = u >> v;
123
124  z = u == v;
125  z = u != v;
126  z = u < v;
127  z = u <= v;
128  z = u > v;
129  z = u >= v;
130
131  w = atan2(u, v);
132  w = pow(u, v);
133}
134