Page MenuHomePhabricator

sync: Use decltype(auto) return type for WITH_LOCK
ClosedPublic

Authored by PiRK on Oct 16 2023, 07:10.

Details

Reviewers
Fabien
Group Reviewers
Restricted Project
Commits
rABC2df11e1fd2f6: sync: Use decltype(auto) return type for WITH_LOCK
Summary

Now that we're using C++17, we can use the decltype(auto) return type
(available since C++14) for functions and lambda expressions.

As demonstrated in this commit, this can simplify cases where previously
the compiler failed to deduce the correct return type.

Just for reference, for the "assign to ref" cases fixed here, there are
3 possible solutions:

  • Return a pointer and immediately deref as used before this commit
  • Make sure the function/lambda returns declspec(auto) as used after this commit
  • Class& i = WITH_LOCK(..., return std::ref(...));

References:

  1. https://en.cppreference.com/w/cpp/language/function#Return_type_deduction
  2. https://en.cppreference.com/w/cpp/language/template_argument_deduction#Other_contexts
  3. https://en.cppreference.com/w/cpp/language/auto
  4. https://en.cppreference.com/w/cpp/language/decltype

Explanations:

  1. https://stackoverflow.com/a/21369192
  2. https://stackoverflow.com/a/21369170
  3. Item 3 in Effective Modern C++ (Scott Meyers) via jnewbery

This is a backport of core#20495

Depends on D14641

Test Plan

ninja all check-all