http://www.parashift.com/c++-faq-lit....html#faq-15.8