Изменить:
Это действительно ошибка в компиляторе, я открыл дефект и получил следующий ответ.
Привет Мотти,
Спасибо за отправку этого вопроса. Как отмечалось в сообщении stackoverflow, это ошибка в нашей реализации decltype. К сожалению, мы не можем исправить эту ошибку в следующей версии Visual Studio, так как код относительно необычен, и мы особенно ограничены в ресурсах.
Следует оригинальный вопрос
Я играю с C ++ 0x в VS10 и столкнулся со следующей проблемой.
std::map<int, int> map()
{
return std::map<int, int>();
}
template <class F>
auto call(F f) -> decltype(f())
{
auto ret = f();
return ret;
}
void check()
{
auto m = call(map);
}
Я получаю следующее предупреждение:
предупреждение C4172: возврат адреса локальной или временной переменной
Однако, когда я изменяю прототип call
на старый стиль:
std::map<int, int> call(F f)
Это нормально, это также нормально, когда call
не является функцией шаблона (даже при использовании выведенных типов возврата).
Если я посмотрю на тип ret
, то это std::map<int, int>
(без ссылок или указателей).
Это ошибка в VS10 или я что-то упустил.