#include <iostream>

using namespace std;

struct Index2D {
	int row = -1, column = -1;

	Index2D(int r): row{r} {}
	Index2D & operator,(int c) { column = c; return *this; }
};

Index2D operator""row(unsigned long long int r) { return Index2D{static_cast<int>(r)}; }
int operator""col(unsigned long long int c) { return static_cast<int>(c); }

class Matrix {
public:
	int operator[](const Index2D & idx) {
		cout << "Element at row " << idx.row << " and column " << idx.column << " is ";
		return 42;
	}
};

int main() {
	Matrix m;

	cout << m[100'500row, 13col] << endl;

	return 0;
}