http://yosefk.com/c++fqa/defective.html