回答編集履歴

2

追記

2020/02/23 03:55

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -11,3 +11,13 @@
11
11
  コンパイラは`Foo<int>& operator(Foo<int> const&)`を自動生成しますが、これはテンプレートではありません。
12
12
 
13
13
  関数テンプレートと通常の関数では通常の関数が優先して呼び出されるため、自動生成された代入演算子がよばれたのではないでしょうか?(あまり自信なし)
14
+
15
+
16
+
17
+ ---
18
+
19
+ 【追記】
20
+
21
+ ならば、`Foo<T>& operator=(Foo<T> const&) = delete;`すれば良さそうなものですが、[ダメでした](https://wandbox.org/permlink/YTfpAAQYJtdqI0jV)。
22
+
23
+ 明示的に`Foo<int>& operator=(Foo<int> const&)`を[定義する](https://wandbox.org/permlink/8alhtIDor59WDn6l)しかないかも知れません。

1

微修正

2020/02/23 03:55

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -6,6 +6,8 @@
6
6
 
7
7
 
8
8
 
9
+ 明示的実体化された`Foo<int>`はテンプレートではなく型ですね。
10
+
9
- 明示的実体化された`Foo<int>`はテンプレートではなく型ですね。コンパイラは`Foo<int>& operator(Foo<int> const&)`を自動生成しますこれはテンプレートではありません。
11
+ コンパイラは`Foo<int>& operator(Foo<int> const&)`を自動生成しますが、これはテンプレートではありません。
10
12
 
11
13
  関数テンプレートと通常の関数では通常の関数が優先して呼び出されるため、自動生成された代入演算子がよばれたのではないでしょうか?(あまり自信なし)