今日、誰かが次の形式のコードを私に提示:可変テンプレートを変異させることはできますか?
#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;
}
あなたはそれがここで実行している見ることができます:http://coliru.stacked-crooked.com/a/3a786c42b5204b0a
10が表示された場合は、一時的に割り当てられるので、私は、42を印刷するには、このコードを予想しました。名前空間の内部では、テンプレートは宣言(インスタンス化ではない)だけであるため、名前空間の内部に変更するデータはありません。それにもかかわらず、それは私を驚かせ、代わりに10を印刷しました。
一時的な割り当てについての警告も期待されていましたが、それも起こりませんでした。
この定義されていない動作ですか、テンプレートの理解が間違っている、または何か他のことが起こっていますか?
_「10は一時的に割り当てられているように見えるので、このコードでは42が表示されると思っていました。 –