fork(1) download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. template <unsigned n> class row_base {
  6. public: int data[n];
  7. };
  8.  
  9. template <unsigned n, unsigned s> class row_exts : public row_base<s> {
  10. };
  11.  
  12. template <unsigned s> class row_exts <1,s> : public row_base<s> {
  13. public: int &x(void) {
  14. return this->data[0];
  15. }
  16. };
  17.  
  18. template <unsigned s> class row_exts <2,s> : public row_exts<1,s> {
  19. public: int &y(void) {
  20. return this->data[1];
  21. }
  22. };
  23.  
  24. template <unsigned n> class row : public row_base<n> {};
  25. template <> class row<1> : public row_exts<1,1> {};
  26. template <> class row<2> : public row_exts<2,2> {};
  27.  
  28. int main() {
  29. row <2> a;
  30.  
  31. a.x() = 42;
  32. a.y() = -1
  33. cout << a.x() << ' ' << a.y();
  34.  
  35. return 0;
  36. }
Success #stdin #stdout 0s 3456KB
stdin
Standard input is empty
stdout
42 -1