Здравствуйте, -MyXa-, Вы писали:
MX>Три компилятора говорят, примерно, так: Warning: returning address of local variable or temporary
MX>Почему?
Дело в том, что throw попадает под return. Вот так ворнинга уже нет:
template<typename T>
T const & at(T const * const a, std::size_t const index, std::size_t const size)
{
if (index < size)
return a[index];
throw index;
}
Забавный кстати случай поскольку throw index имеет вообще-то тип void. И почему компилятор вообще разрешает return condition ? int : void -- загадка.