typename Iterator::container_type::value_type
こんな風に::で三個つなげるのは合法ですかね??