it's better to use typename Container::value_type to enable cross-compilation