http://www.rsdn.ru/forum/cpp.applied/1825908.aspx