Is "clamp" NaN-correct? It looks like it will not return NaN if min/max is NaN. It probably should. Just change 
*self > *mx to !(*self <= *mx), and similar for the other case.