回答編集履歴

3

コード修正

2020/12/18 03:31

投稿

ozwk
ozwk

スコア13551

test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  template<typename T>
28
28
 
29
- void func(const typename Foo<T>::Boo& a){}
29
+ void func(const typename Foo<T>::Boo a){}
30
30
 
31
31
  ```
32
32
 

2

分解

2020/12/18 03:31

投稿

ozwk
ozwk

スコア13551

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
- func(x); // func(Foo<int>::Boo) ? func(Foo<double>::Boo) ?
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

追記

2020/12/18 03:31

投稿

ozwk
ozwk

スコア13551

test CHANGED
@@ -43,3 +43,7 @@
43
43
  }
44
44
 
45
45
  ```
46
+
47
+
48
+
49
+ という感じで型が解決できないので`::`の左にある型変数は推測してくれないようです