niejednoznacznośc. Jak to?

0

Cześć :)

Rozważmy:

#include <iostream>
void f(std::string&& rref){
    std::cout << "movek\n";
}
void f(std::string s){ 
}
int main() {
    std::string s = "s";
    f(std::move(s));
}

Wg kompilatora jest nie wiadomo, którą funkcję wywołać. Nie rozumiem skąd wynika problem, skoro ja explicite rzutuje na rvalue reference.

Czyżby && miałby być rzutowany na value?

1

std::move zwraca xvalue, a niekoniecznie rvalue, stąd może wynika nieścisłość.
Jest to jedynie luźna sugestia.

0

czym różni się xvalue od rvalue?

( ściślej: std::move zwraca rvalue reference)

3

Na tej samej zasadzie co overload:

void foo(int) {}
void foo(in const&) {}
...
foo(1); // ambiguous

Poczytaj 13.3.3.2.

1

Wg kompilatora jest nie wiadomo, którą funkcję wywołać. Nie rozumiem skąd wynika problem, skoro ja explicite rzutuje na rvalue reference.

Nie doszukuj się logiki w C++, bo jej tam nie ma. Skoro nie wiadomo którą wywołać, to znaczy że nie wiadomo, bo jakaś reguła głęboko w treści standardu nakazuje że ma nie być wiadomo :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1