回答編集履歴
3
コード修正
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
template<typename T>
|
28
28
|
|
29
|
-
void func(const typename Foo<T>::Boo
|
29
|
+
void func(const typename Foo<T>::Boo a){}
|
30
30
|
|
31
31
|
```
|
32
32
|
|
2
分解
test
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
正直あまり良くわかっていないのですが、
|
2
2
|
|
3
3
|
|
4
|
+
|
5
|
+
こういう型と
|
4
6
|
|
5
7
|
```C++
|
6
8
|
|
@@ -12,35 +14,41 @@
|
|
12
14
|
|
13
15
|
};
|
14
16
|
|
17
|
+
```
|
15
18
|
|
19
|
+
|
20
|
+
|
21
|
+
こういう関数があったとして
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
```C++
|
26
|
+
|
27
|
+
template<typename T>
|
28
|
+
|
29
|
+
void func(const typename Foo<T>::Boo& a){}
|
30
|
+
|
31
|
+
```
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
こういう特殊化をした場合
|
36
|
+
|
37
|
+
```C++
|
16
38
|
|
17
39
|
template<> struct Foo<int>{using Boo = int;};
|
18
40
|
|
19
41
|
template<> struct Foo<double>{using Boo = int;};
|
20
42
|
|
43
|
+
```
|
21
44
|
|
22
45
|
|
23
46
|
|
24
47
|
|
25
48
|
|
49
|
+
```C++
|
26
50
|
|
27
|
-
template<typename T>
|
28
|
-
|
29
|
-
void func(const typename Foo<T>::Boo& a){}
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
int main(){
|
34
|
-
|
35
|
-
int x = 1;
|
36
|
-
|
37
|
-
|
51
|
+
func(1); // func(Foo<int>::Boo) ? func(Foo<double>::Boo) ?
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
return 0;
|
42
|
-
|
43
|
-
}
|
44
52
|
|
45
53
|
```
|
46
54
|
|
1
追記
test
CHANGED
@@ -43,3 +43,7 @@
|
|
43
43
|
}
|
44
44
|
|
45
45
|
```
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
という感じで型が解決できないので`::`の左にある型変数は推測してくれないようです
|