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