2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / g++.old-deja / g++.robertl / eb127.C
blobd8d28b36a6341bde231f6a89f82266636ef9bda1
1 // { dg-do assemble  }
2 // Gets ICE 40.
4 #include <vector>
5 #include<string>
6 #include <iostream>
8 using namespace std;
10 class ODEsolver
12     private:
13         void eulerODE(vector<double>& y, double& t, double& dt);
14         void midpointODE(vector<double>& y, double& t, double& dt);
16     protected:
17         void (ODEsolver::*useMethod)(vector<double>&, double&, double&);
18         void init();
20     public:
21         ODEsolver();
22         void timeloop(vector<double>& y, double ts, double te, double dt);
26 ODEsolver::ODEsolver()
28   init();
32 void ODEsolver::eulerODE(vector<double>& y, double& t, double& dt)
34   y[0] = dt * 2.;
37 void ODEsolver::midpointODE(vector<double>& y, double& t, double& dt)
39   y[0] = dt * 3.;
44 void ODEsolver::init()
46   ODEsolver::useMethod = &ODEsolver::midpointODE;
49 void ODEsolver::timeloop(vector<double>& y, double ts, double te, double dt)
51   (ODEsolver::useMethod)(y,ts,dt); // { dg-error "" } should use this->*
54 int main (int nargs, char** args)
56   ODEsolver solver;
57   vector<double> y(2);  double t_start=5.;  double t_end=7.;  double dt=2.;
58   solver.timeloop(y,t_start,t_end,dt);
59   cout << y[0] << endl;
60   return(0);