FSF GCC merge 02/23/03
[official-gcc.git] / gcc / testsuite / g++.old-deja / g++.robertl / eb127.C
blobf83b6c2cc472aeb45c65b26809636d5281985da0
1 // Gets ICE 40.
3 #include <vector>
4 #include<string>
5 #include <iostream>
7 using namespace std;
9 class ODEsolver
11     private:
12         void eulerODE(vector<double>& y, double& t, double& dt);
13         void midpointODE(vector<double>& y, double& t, double& dt);
15     protected:
16         void (ODEsolver::*useMethod)(vector<double>&, double&, double&);
17         void init();
19     public:
20         ODEsolver();
21         void timeloop(vector<double>& y, double ts, double te, double dt);
25 ODEsolver::ODEsolver()
27   init();
31 void ODEsolver::eulerODE(vector<double>& y, double& t, double& dt)
33   y[0] = dt * 2.;
36 void ODEsolver::midpointODE(vector<double>& y, double& t, double& dt)
38   y[0] = dt * 3.;
43 void ODEsolver::init()
45   ODEsolver::useMethod = &ODEsolver::midpointODE;
48 void ODEsolver::timeloop(vector<double>& y, double ts, double te, double dt)
50   (ODEsolver::useMethod)(y,ts,dt); // ERROR - should use this->*
53 int main (int nargs, char** args)
55   ODEsolver solver;
56   vector<double> y(2);  double t_start=5.;  double t_end=7.;  double dt=2.;
57   solver.timeloop(y,t_start,t_end,dt);
58   cout << y[0] << endl;
59   return(0);