Skip to content
Snippets Groups Projects
Commit 25c565bc authored by Carsten Gräser's avatar Carsten Gräser
Browse files

[bugfix] Use decltype(auto) for return value

If the return value can be a temporary or a reference
one has to use decltype(auto). A pure auto would create
a temporary copy of a returned reference.
parent 5a2782f2
No related branches found
No related tags found
No related merge requests found
Pipeline #
......@@ -91,19 +91,19 @@ namespace Imp {
template<class Container, class Index,
std::enable_if_t<IsTuple<std::decay_t<Container>>::value, int> = 0>
constexpr auto elementAt(Container&& c, Index&&, PriorityTag<2>)
constexpr decltype(auto) elementAt(Container&& c, Index&&, PriorityTag<2>)
{
return std::get<Index::value>(c);
}
template<class T, T... t, class Index>
constexpr auto elementAt(std::integer_sequence<T, t...> c, Index&&, PriorityTag<1>)
constexpr decltype(auto) elementAt(std::integer_sequence<T, t...> c, Index&&, PriorityTag<1>)
{
return std::get<Index::value>(std::make_tuple(std::integral_constant<T, t>()...));
}
template<class Container, class Index>
constexpr auto elementAt(Container&& c, Index&& i, PriorityTag<0>)
constexpr decltype(auto) elementAt(Container&& c, Index&& i, PriorityTag<0>)
{
return c[i];
}
......@@ -131,7 +131,7 @@ namespace Imp {
* * std::integer_sequence
*/
template<class Container, class Index>
constexpr auto elementAt(Container&& c, Index&& i)
constexpr decltype(auto) elementAt(Container&& c, Index&& i)
{
return HybridAlgorithm::Imp::elementAt(std::forward<Container>(c), std::forward<Index>(i), PriorityTag<42>());
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment