回答編集履歴

2

微修正

2020/09/26 10:25

投稿

Chironian
Chironian

スコア23272

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

1

補足

2020/09/26 10:25

投稿

Chironian
Chironian

スコア23272

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