It is more idiomatic to call the prefix increment of the object itself in the postfix increment:
X operator++(int)
{
X copy(*this);
++*this; // call the prefix increment
return copy;
}
The logic of incrementing an X
object is thus solely contained inside the prefix version.