-3

I wrote c++17 code below :

class Myclass{
public:
    Myclass()
    {
        std::cout << "ctor\n";
    }

    Myclass(const Myclass&)
    {
        std::cout << "copy ctor\n";
    }

    Myclass(Myclass&&)
    {
        std::cout << "move ctor\n";
    }

    int x;
};

void foo(Myclass mc)
{
    std::cout << "void foo(Myclass mc)\n";
}

void foo(Myclass&& mcrr)
{
    std::cout << "void foo(Myclass&& mcrr)\n";
}

int main()
{
    foo(Myclass{});
}

But, I was given "call of overloaded foo(Myclass) is ambiguous" error. What is problem? I expected that second function will be called.

kaernk
  • 63
  • 6

1 Answers1

1

void foo(Myclass mc) and void foo(Myclass&& mcrr) are equally good matches.

Make the first function void foo(const MyClass& mc) and your call will match the second foo since it wont require any conversion.

Demo

Ted Lyngmo
  • 93,841
  • 5
  • 60
  • 108