Beachten Sie Folgendes:Overloading Konvertierungsfunktion Vorlagen
struct X {
template <class T> operator T(); // #1
template <class T> operator T&(); // #2
};
int a = X{}; // error: ambiguous
int& b = X{}; // calls #2
int const& c = X{}; // calls #2
Die Situation für b
einfach ist, #2
ist der einzig gangbare Kandidat. Was ist die Regel, die angibt, dass #2
ist #1
für die Initialisierung von int const&
vorzuziehen, aber die beiden sind mehrdeutig für die Initialisierung von int
?
[\ [over.match.conv \]] (http://eel.is/c++draft/over.match.conv) und [\ [over.match.ref \]] (http://eel.is/c++draft/over.match.ref) scheint ein guter Ausgangspunkt zu sein. – jaggedSpire
@jaggedSpire Diese Abschnitte zeigen an, was die Kandidatenfunktionen sind. Nicht wie man das eine oder das andere vorzieht (oder nicht). – Barry
das Templating ist hier nicht essentiell, auch 'operator int' und' operator int & 'sind mehrdeutig – TemplateRex