回答編集履歴
1
間違いを修正
test
CHANGED
@@ -10,9 +10,9 @@
|
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
以下の関数は、第2引数は配列の参照となっていますが、これは C++ で禁止されているはずです。
|
13
|
+
~~以下の関数は、第2引数は配列の参照となっていますが、これは C++ で禁止されているはずです。
|
14
14
|
|
15
|
-
|
15
|
+
なので、エイリアステンプレートを使ったときに、コンパイルエラーにならずにビルドでき、さらにその関数が呼ばれるほうが不思議です。~~
|
16
16
|
|
17
17
|
```
|
18
18
|
|
@@ -22,52 +22,16 @@
|
|
22
22
|
|
23
23
|
|
24
24
|
|
25
|
-
|
25
|
+
これは間違いだったため、訂正します。
|
26
26
|
|
27
|
-
|
27
|
+
参照の配列は禁止されているが、配列の参照は合法でした。
|
28
|
-
|
29
|
-
There shall be no references to references, no arrays of references, and no pointers to references.
|
30
|
-
|
31
|
-
```
|
32
28
|
|
33
29
|
|
34
30
|
|
35
|
-
|
31
|
+
----
|
36
32
|
|
37
33
|
|
38
34
|
|
39
|
-
|
35
|
+
EnumHack さんの解説を見ましたが、そういう背景があったのですね。
|
40
36
|
|
41
|
-
std::ostream &operator<<(std::ostream &os, const T &mat[Y][X])
|
42
|
-
|
43
|
-
```
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
```
|
48
|
-
|
49
|
-
C
|
37
|
+
ADL も今回知ったのですが、C++ は奥が深いです。
|
50
|
-
|
51
|
-
```
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
なので、エイリアステンプレートを使ったときに、コンパイルエラーにならずにビルドでき、さらにその関数が呼ばれるほうが不思議です。
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
試しに第2引数の参照をはずしたところ、どちらの場合も配列のアドレスが表示されるようになりました。
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
```
|
66
|
-
|
67
|
-
std::ostream &operator<<(std::ostream &os, const T mat[Y][X])
|
68
|
-
|
69
|
-
```
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
なぜこのような現象が起こるのか自分も理解できないので、分かる人がいましたら解説をお願いしたいですね。
|