Я хотел бы написать функцию шаблона, которая возвращает ссылку или значение в зависимости от некоторого выражения времени компиляции. То, что я пробовал до сих пор, выглядит примерно так:
template<typename T>
auto&& Func()
{
if constexpr (some_compile_time_expression)
{
return GetReferenceFromSomewhere();
}
else
{
return GetValueFromSomewhere();
}
}
Это отлично подходит для всех типов ссылок, но не работает для значений. Например, если GetValueFromSomewhere
возвращает Foo
, то компилятор выводит возвращаемый тип Func
как Foo&&
и предупреждает, что я возвращаю адрес временного.
Есть ли способ сделать эту работу, или я вынужден дразнить две ветки отдельно (через перегрузки функций или некоторые из них)?