some problem about move semantics
Jonathan Wakely
jwakely.gcc@gmail.com
Mon Mar 25 12:39:00 GMT 2019
On Mon, 25 Mar 2019 at 01:33, 叶佑群 wrote:
>
> Hi,all, I have code as below:
>
> void check(int & val)
> {
> std::cout << "int &\n";
> }
>
> void check(int && val)
> {
> std::cout << "int &&\n";
> }
>
> template <typename T>
> void print (T && val)
> {
> check (std::forward<T>(val));
> }
>
> int main()
> {
> int x = 0;
> print (x);
> print (std::move (x));
> }
>
> I have some problems:
>
> A、when call print (std::move (x)), the compiler will deduction print to
> Void print (int && val)
>
> So val is a rvalue reference, so check (int && val) should be
> invoked, but actually not, why?
But actually it is invoked, as the program clearly demonstrates.
But this is not a question about GCC, it's about general C++ and so is
off topic here.
More information about the Gcc-help
mailing list