URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.2.2/] [gcc/] [testsuite/] [g++.old-deja/] [g++.robertl/] [eb127.C] - Rev 154
Compare with Previous | Blame | View Log
// { dg-do assemble }
// Gets ICE 40.
#include <vector>
#include<string>
#include <iostream>
using namespace std;
class ODEsolver
{
private:
void eulerODE(vector<double>& y, double& t, double& dt);
void midpointODE(vector<double>& y, double& t, double& dt);
protected:
void (ODEsolver::*useMethod)(vector<double>&, double&, double&);
void init();
public:
ODEsolver();
void timeloop(vector<double>& y, double ts, double te, double dt);
};
ODEsolver::ODEsolver()
{
init();
}
void ODEsolver::eulerODE(vector<double>& y, double& t, double& dt)
{
y[0] = dt * 2.;
}
void ODEsolver::midpointODE(vector<double>& y, double& t, double& dt)
{
y[0] = dt * 3.;
}
void ODEsolver::init()
{
ODEsolver::useMethod = &ODEsolver::midpointODE;
}
void ODEsolver::timeloop(vector<double>& y, double ts, double te, double dt)
{
(ODEsolver::useMethod)(y,ts,dt); // { dg-error "" } should use this->*
}
int main (int nargs, char** args)
{
ODEsolver solver;
vector<double> y(2); double t_start=5.; double t_end=7.; double dt=2.;
solver.timeloop(y,t_start,t_end,dt);
cout << y[0] << endl;
return(0);
}