Ich habe eine Template-Funktion:Was ist falsch an einer flüchtigen Typableitung in Vorlagenfunktionen?
template <typename T>
inline void Acquire_Store(volatile T* ptr, T value) {
// ...
}
Wenn ich versuche, es so zu berufen:
volatile Node* node;
Acquire_Store(&node, static_cast<Node*>(nullptr));
Die beiden g ++, Klirren ++ Compiler sagen, so etwas wie folgt aus:
abgeleitet widersprüchliche Typen für Parameter 'T' ('flüchtige Liste :: Knoten *' vs. 'Liste :: Knoten *')
Wie kann diese Vorlagenfunktion korrekt aufgerufen werden?
Aktualisierung.
Jetzt bin ich nicht sicher über node
's Typ - vielleicht sollte ich es zu Node* volatile node;
ändern?
Ich möchte die Variable node
flüchtig sein, aber nicht das spitze Objekt.
@ abyss.7 tun 'static_cast' Sie zwingen Compiler zu denken, dass' T' ist ein zwei verschiedene Arten zur gleichen Zeit :) - es wird wahrscheinlich auf einem Quantencomputer der 2113 Jahr möglich sein, aber nicht heutzutage :) – zaufi
@zaufi vielleicht ist 'static_cast' eine falsche Sache - aber ich weiß nicht, wie man einen richtigen Anruf macht - darum geht es in der Frage. –
was genau willst du? Natürlich müssen Sie entweder die Signatur oder eine Call-Site ändern. – zaufi