A comma operator can be overloaded, although it is typically not recommended (in many cases the overloaded comma is confusing).
The expression above defines 16 values for 4*4 matrix. If you are wondering how this is possible, I'll show a simpler example. Suppose we want to be able to write something like
MyVector<double> R = (MyVector<double>() << 1 , 2 , 3);
then we can define MyVector so that <<
and ,
operators append new value to the vector:
template<typename T>
class MyVector: public std::vector<T> {
public:
MyVector<T>& operator << (T value) { push_back(value); return *this; }
MyVector<T>& operator , (T value) { push_back(value); return *this; }
...
};