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

回答編集履歴

2

ミス修正

2019/03/13 13:53

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -4,9 +4,9 @@
4
4
  テンプレート引数が確定しないと(実体化しないと)確定しないものは、最初の名前解決の時には無視されるようです。そして、それらは次のフェーズである実体化処理時に名前解決されます。
5
5
 
6
6
  `Base<Derived<SomeType>, SomeType>`は、SomeTypeが決まらないと決まりません。なので、そのメンバ変数のmember_も確定しません。(仮にint型だったとしても同様です。Baseが特殊化されていて、特殊化の方にはmember_がないことも許されますから。)
7
- しかし、使う側は member_ で呼び出しているだけで特に限定する修飾がなく、テンプレート引数に依存していません。結果、これは最初の名前解決の際に無視されます。
7
+ しかし、使う側は member_ で呼び出しているだけで特に限定する修飾がなく、テンプレート引数に依存していません。結果、これは最初の名前解決の際にマッチングされます。
8
8
 
9
- つまり、最初の名前解決時、使う側は「あるもの」なので名前解決しようとします。しかし、その時、規定クラスの member_ はテンプレート引数に依存しているので無視されるため、名前解決エラーになります。
9
+ つまり、最初の名前解決時、使う側は「あるもの」なので名前解決しようとします。しかし、その時、規定クラスの member_ はテンプレート引数に依存しているので無視され、名前解決エラーになります。
10
10
 
11
11
  使う際に「this->member_」とすると、これはthisのメンバという限定修飾をしています。thisはテンプレート引数に依存しているので、最初の名前解決では同じく無視され、実体化時に名前解決されるので両者めでたくマッチングされます。
12
12
 

1

微修正

2019/03/13 13:53

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -3,7 +3,7 @@
3
3
  それは、標準規格通りの動作です。
4
4
  テンプレート引数が確定しないと(実体化しないと)確定しないものは、最初の名前解決の時には無視されるようです。そして、それらは次のフェーズである実体化処理時に名前解決されます。
5
5
 
6
- `Base<Derived<SomeType>, SomeType>`は、SomeTypeが決まらないと決まりません。なので、そのメンバ変数のmember_も確定しません。(仮にint型だったとしても同様です。Baseが特殊化されていて、特殊化の方にはmember_がないことも許されます。)
6
+ `Base<Derived<SomeType>, SomeType>`は、SomeTypeが決まらないと決まりません。なので、そのメンバ変数のmember_も確定しません。(仮にint型だったとしても同様です。Baseが特殊化されていて、特殊化の方にはmember_がないことも許されますから。)
7
7
  しかし、使う側は member_ で呼び出しているだけで特に限定する修飾がなく、テンプレート引数に依存していません。結果、これは最初の名前解決の際に無視されます。
8
8
 
9
9
  つまり、最初の名前解決時、使う側は「あるもの」なので名前解決しようとします。しかし、その時、規定クラスの member_ はテンプレート引数に依存しているので無視されるため、名前解決エラーになります。