decltypeStrictly works at compile time. So you can use it with code that will dereference iterators end, or use
decltype(sqrt(-1.))
Absolutely no execution penalty associated with this is simply executed.
, :
decltype , . , decltype(m)::const_iterator i; , - .