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

回答編集履歴

2

微修正

2020/09/26 10:25

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -7,4 +7,4 @@
7
7
  この時の`i`は`initializer_list<pair < F, S >>::iterator`型です。
8
8
 
9
9
  autoではなくきちんと型を記述するなら、`for (typename std::initializer_list<std::pair < F, S >>::iterator i = input.begin(); i != input.end(); ++i) {}`と書きます。
10
- テンプレート引数に依存しているため、`std::initializer_list<std::pair < F, S >>::iterator`が型なのかメンバ変数なのかコンパイラは判断できません。デフォルトではメンバ変数扱いするので、そうないことをコンパイラに教えるためにtypenameを記述します。
10
+ テンプレート引数に依存しているため、`std::initializer_list<std::pair < F, S >>::iterator`が型なのかメンバ変数なのかコンパイラは判断できません。デフォルトでは(確か)メンバ変数扱いするので、あることをコンパイラに教えるためにtypenameを記述します。

1

補足

2020/09/26 10:25

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -4,4 +4,7 @@
4
4
  `for (auto i : input) {}` のように使います。この時の`i`は`pair<F,S>`型です。
5
5
 
6
6
  イテレータなら `for (auto i=input.begin(); i!=input.end(); ++i) { }`のように使います。
7
- この時の`i`は`initializer_list<pair < F, S >>::iterator`型です。
7
+ この時の`i`は`initializer_list<pair < F, S >>::iterator`型です。
8
+
9
+ autoではなくきちんと型を記述するなら、`for (typename std::initializer_list<std::pair < F, S >>::iterator i = input.begin(); i != input.end(); ++i) {}`と書きます。
10
+ テンプレート引数に依存しているため、`std::initializer_list<std::pair < F, S >>::iterator`が型なのかメンバ変数なのかコンパイラは判断できません。デフォルトではメンバ変数扱いするので、そうでないことをコンパイラに教えるためにtypenameを記述します。