teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

なぜ T[X][Y] だと正しく動くかを追記

2018/09/20 17:42

投稿

mitama_rs
mitama_rs

スコア165

answer CHANGED
@@ -26,4 +26,12 @@
26
26
 
27
27
  は依存型名なので関数テンプレートの推論対象ではないです。
28
28
 
29
- 結果、`operator<<`のオーバーロードはADLの候補に挙がらず、int[3][3]はポインタに変換されて`operator<<`が解決されたことにより、先頭ポインタのアドレスが表示されたものと考えられます。
29
+ 結果、`operator<<`のオーバーロードはADLの候補に挙がらず、int[3][3]はポインタに変換されて`operator<<`が解決されたことにより、先頭ポインタのアドレスが表示されたものと考えられます。
30
+
31
+ ```cpp
32
+ template<class T, size_t Y, size_t X>
33
+ using matrix = T[Y][X];
34
+ ```
35
+
36
+ とalias templateを記述したときに想定通りオーバーロードが解決されるのは、
37
+ `T[Y][X]`が依存型名ではないため、推論の対象となるからです。