Почему этот «min» шаблон cpp-next виноват?

Я читал cpp-next , где это min ] представлен как пример того, как подробный код C ++ можно сравнить с кодом python

template 
auto min(T x, U y)->decltype(x < y ? x : y)
{ return x < y ? x : y; }

Сначала это выглядит невинно, но Дэвид Вандеворде сделал это замечание

Шаблон min, который использует decltype в своей спецификации типа возвращаемого значения, не работает : Он возвращает ссылку (поскольку аргумент является lvalue), который в большинстве случаев ссылается на локальную переменную.

Я подумал, что не всем может быть понятно, как проявляется проблема. Не могли бы вы дать подробное объяснение и возможные исправления?

21
задан Johannes Schaub - litb 19 November 2011 в 15:49
поделиться