// Testcase for uses of bool.
// Build don't link:

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;			// gets bogus error
  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;
