#include "libscl.h"
using namespace scl;
using namespace std;

class container {
private:
  INTEGER len;
  REAL *  x;
public:
  container() : len(0), x(0) {}
  container(INTEGER l) : len(l) {x = new(nothrow) REAL[len];}
 ~container() { delete [] x; }
  INTEGER size() { return len; }

//This will compile:
  const REAL& operator[] (INTEGER i) const { return x[i]; }; 
  REAL&       operator[] (INTEGER i) { return x[i]; }; 

//This will compile:
//REAL  operator[] (INTEGER i) const { return x[i]; }; 
//REAL& operator[] (INTEGER i) { return x[i]; }; 

//This will not compile:
//const REAL& operator[] (INTEGER i) { return x[i]; }; 
//REAL&       operator[] (INTEGER i) { return x[i]; }; 

//This will not compile:
//REAL  operator[] (INTEGER i) { return x[i]; }; 
//REAL& operator[] (INTEGER i) { return x[i]; }; 

};

int main(int argc, char** argp, char** envp)
{
  container c(5);
  for (INTEGER i=0; i<c.size(); ++i) c[i] = i;
  for (INTEGER i=0; i<c.size(); ++i) cout << c[i] << '\n';
  return 0;
}
