回答編集履歴
2
追記
answer
CHANGED
@@ -4,4 +4,9 @@
|
|
4
4
|
|
5
5
|
明示的実体化された`Foo<int>`はテンプレートではなく型ですね。
|
6
6
|
コンパイラは`Foo<int>& operator(Foo<int> const&)`を自動生成しますが、これはテンプレートではありません。
|
7
|
-
関数テンプレートと通常の関数では通常の関数が優先して呼び出されるため、自動生成された代入演算子がよばれたのではないでしょうか?(あまり自信なし)
|
7
|
+
関数テンプレートと通常の関数では通常の関数が優先して呼び出されるため、自動生成された代入演算子がよばれたのではないでしょうか?(あまり自信なし)
|
8
|
+
|
9
|
+
---
|
10
|
+
【追記】
|
11
|
+
ならば、`Foo<T>& operator=(Foo<T> const&) = delete;`すれば良さそうなものですが、[ダメでした](https://wandbox.org/permlink/YTfpAAQYJtdqI0jV)。
|
12
|
+
明示的に`Foo<int>& operator=(Foo<int> const&)`を[定義する](https://wandbox.org/permlink/8alhtIDor59WDn6l)しかないかも知れません。
|
1
微修正
answer
CHANGED
@@ -2,5 +2,6 @@
|
|
2
2
|
|
3
3
|
`Foo<int>`へ、`Foo<int>`を代入しようとするとコンパイラが自動生成した代入演算子が呼ばれ、`Foo<double>`ならばユーザ定義の代入演算子が呼ばれるのですね。
|
4
4
|
|
5
|
+
明示的実体化された`Foo<int>`はテンプレートではなく型ですね。
|
5
|
-
|
6
|
+
コンパイラは`Foo<int>& operator(Foo<int> const&)`を自動生成しますが、これはテンプレートではありません。
|
6
7
|
関数テンプレートと通常の関数では通常の関数が優先して呼び出されるため、自動生成された代入演算子がよばれたのではないでしょうか?(あまり自信なし)
|