heute jemand stellte mich mit dem Code der folgenden Form: http://coliru.stacked-crooked.com/a/3a786c42b5204b0aKann eine variable Vorlage mutiert werden?
ich diesen Code zu erwarten 42 zu drucken, da 10 erscheint in einem temporären zugeordnet werden soll:
#include <iostream>
namespace example {
template <typename T>
T variable_template = T(42);
}
int main() {
example::variable_template<int> = 10;
std::cout << example::variable_template<int> << std::endl;
}
Sie hier laufen sehen . Innerhalb des Namespace ist die Vorlage nur eine Deklaration (keine Instantiierung), daher gibt es keine Daten, die innerhalb des Namespace mutieren. Trotzdem überraschte es mich und druckte stattdessen 10.
Ich hätte auch eine Warnung über die Zuweisung zu einem temporären erwartet, aber das ist auch nicht passiert.
Ist dieses undefinierte Verhalten, ist mein Verständnis von Vorlagen fehlerhaft, oder läuft etwas anderes?
_ "Ich habe erwartet, dass dieser Code 42 druckt, da 10 anscheinend einem temporären zugeordnet ist." _ Was temporär? –