Я пытаюсь увидеть выведенный тип в структурированной привязке для unordered_map, используя auto
, auto &
и auto &&
.
#include <string>
#include <iostream>
#include <unordered_map>
#include <type_traits>
int main() {
std::unordered_map<std::string, std::string> m{{"a","a1"}, {"b","b1"}};
for(auto && [k,v]:m)
{
std::cout << std::is_same<decltype(k), std::string const >::value << '\n';
std::cout << std::is_same<decltype(v), std::string >::value << '\n';
}
}
Независимо от того, что я использую for(auto [k,v]:m)
или for(auto & [k,v]:m)
или for(auto && [k,v]:m)
, вывод всегда
1
1
Мои вопросы:
почему decltype(k)
и decltype(v)
не являются ссылочными типами в данном случаеfor(auto & [k,v]:m)
или for(auto && [k,v]:m)
?
, почему decltype(k)
имеет тип const
в случае for(auto [k,v]:m)
?