summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.old-deja/g++.jason/bool.C
blob: 5e897bc54ac0c265ff39058819af362dce8947a3 (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
// { dg-do assemble  }
// Testcase for uses of bool.

int i,j,k;

/* Check that types of certain expressions are bool.  */
void f ()
{
  i ? j == k : true;
  i ? j < k : true;
  i ? j && k : true;
}

/* Check that g++ can find a conversion to bool when one exists.  */
struct A { operator char * (); } a;
struct B { operator int (); } b;
struct C { operator float (); } c;
struct D { operator bool (); } d;
struct E { operator int E::* (); } e;

void g ()
{
  a || true;
  b || true;
  c || true;			// { dg-bogus "" } 
  d || true;
  e || true;
}

/* Check for support in templates.  */
template <class T> struct F { };
template class F<bool>;

template <class T> void f (T, bool) { }
template void f (bool, bool);

/* Special cases.  */
void h ()
{
  /* Used to cause infinite recursion.  */
  i&1 || true;
  /* Should find conversion path to int.  */
  d == true;
}

bool boo = -1;