diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-11-18 23:35:39 +0200 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-11-24 15:18:52 +0200 |
commit | 0eacde623bb08504c71e18713188a7cfaf4e8e80 (patch) | |
tree | b6b2f9a499bc0cec79827958b4a99a6f1da2752d /src | |
parent | 796210ecea8270cd870b0ef11833a26bfcf766cd (diff) |
libcamera: object: Avoid argument copies in invokeMethod()
Template argument deduction results in the lvalue and lvalue reference
arguments to the invokeMethod() function causing deduction of the Args
template type to a non-reference type. This results in the argument
being passed by value and copied.
Fix this by using a cv-unqualified rvalue reference parameter type. The
type is then deduced to an lvalue reference when the argument is an
lvalue or lvalue reference, due to a combination of the special template
argument deduction rule for rvalue reference parameter types:
If P is an rvalue reference to a cv-unqualified template parameter
(so-called forwarding reference), and the corresponding function call
argument is an lvalue, the type lvalue reference to A is used in place
of A for deduction.
(https://en.cppreference.com/w/cpp/language/template_argument_deduction)
and the reference collapsing rule
(https://en.cppreference.com/w/cpp/language/reference#Reference_collapsing).
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src')
0 files changed, 0 insertions, 0 deletions