// { dg-do assemble  }
// 
// Copyright (C) 2001 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 25 Jul 2001 <nathan@codesourcery.com>

// Origin: gustavo@geneura.ugr.es
// Bug 3624. Template instantiation of a reference type was not
// converted from reference when doing a call.

#include <iostream>

using namespace std;

template <class A, class B, class C, C& c, bool d> class eo: public A
{
public:
  eo() 
  {
    cout << this->x << " " << this->y << " "
	 << c(*this) << " "
	 << ((d)?"true":"false") << endl;
  }
  
private:
  B b;
};

struct XY
{
  float x, y;

  XY(): x(1), y(0.1) {}
};

float fitness(const XY& a)
{
  return a.x + a.y;
}

struct fitness2
{
  float operator()(const XY& a)
  {
    return a.x - a.y;
  }
  
  float f(const XY& a)
  {
    return a.x - a.y;
  }
};

struct fitness3
{
  float operator()(const XY& a)
  {
    return a.x / a.y;
  }
};

fitness2 f2;
fitness3 f3;

int main()
{
  eo<XY, float, fitness2, f2, true> eo2;
  eo<XY, float, fitness3, f3, true> eo3;

  return 0;
}
