#ifndef SINGLE
//  An adapted ObjectSpace example for use with SGI STL

#include <iostream.h>
#include <algo.h>

#ifdef MAIN
#define bcompos1_test main
#endif
struct odd : public unary_function<int, bool>
{
  odd() {}
  bool operator()(int n_) const { return(n_ % 2) == 1; }
};

struct positive : public unary_function<int, bool>
{
  positive() {}
  bool operator()(int n_) const { return n_ >= 0; }
};

#endif
int bcompos1_test(int, char**)
{
  cout<<"Results of bcompos1_test:"<<endl;

#ifndef ACORN_CFRONT
int array [6] = { -2, -1, 0, 1, 2, 3 };
#else
static int array [6] = { -2, -1, 0, 1, 2, 3 };
#endif

#ifndef ACORN_CFRONT
  binary_compose<logical_and<bool>, odd, positive>
    b = binary_compose<logical_and<bool>, odd, positive>
(logical_and<bool>(), odd(), positive());
#else
  binary_compose<logical_and<bool>, odd, positive, int, bool>
    b = binary_compose<logical_and<bool>, odd, positive, int, bool>
(logical_and<bool>(), odd(), positive());
#endif

  int* p = find_if(array, array + 6, b);
  if(p != array + 6)
    cout << *p << " is odd and positive" << endl;

  return 0;
}
