ja zaskoczeni, widząc, że po kompilacji:typu mającego konwersję do typu && operatora
struct C {
operator C&&() {
std::cerr << "ref'd\n";
throw std::runtime_error("what is happening?");
}
};
typu z operatorem na własnej przemiany RValue-odniesienia. Jednak nie mogę zmusić operatora do wywołania tego, co myślę, że może to zrobić. Przekazywanie wartości do funkcji pobierającej wartość rvalue kończy się niepowodzeniem, a wywołanie std::move
obiektu nie wywołuje niczego.
Dlaczego ten kod jest w stanie skompilować się w ogóle i czy istnieje sposób, aby uruchomić tę funkcję?
clang daje warning: conversion function converting 'C' to itself will never be used
z lub bez odniesienia do typu.
Ten sam wynik na klang dla operatora 'C &()'. Pytania oznaczają. –
Nie jest technicznie nieopłacalne; możesz zrobić 'C c; c.operator C &&(); 'lub weź wskaźnik funkcji członka' C && (C :: * ptr)() = & C :: operator C &&; 'i użyj go. Po prostu nie będzie używane w zdalnie rozsądnym kodzie. – Wintermute
@Wintermute Innym wyjątkiem jest wysyłka wirtualna. –