The basic idea is to overload both the <<
and the ,
operators.
m << 1
is overloaded to put 1
into m
and then returns a special proxy object – call it p
– holding a reference to m
.
Then p, 2
is overloaded to put 2
into m
and return p
, so that p, 2, 3
will first put 2
into m
and then 3
.
A similar technique is used with Boost.Assign, though they use +=
rather than <<
.