回答編集履歴
3
悲しい typo
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
どうパースされているのかまでは私には分からないのですが、不等号か何かかと思っているのでしょうね?
|
8
8
|
|
9
9
|
この記法を使って修正したコードが次です。
|
10
|
-
なお、 `if constexpr`
|
10
|
+
なお、 `if constexpr` 文は `tail` の数が 0 でないときはそもそも `Turing<tail...>` を展開しないようにするために利用しています。これにより `template <int head = 0, ...>` のような無意味なデフォルト引数が必要なくなります。 (無意味でなかったならごめんなさい) 。
|
11
11
|
|
12
12
|
```cpp
|
13
13
|
#include <iostream>
|
2
的を得てない参考を削除
answer
CHANGED
@@ -9,8 +9,6 @@
|
|
9
9
|
この記法を使って修正したコードが次です。
|
10
10
|
なお、 `if constexpr` 式は `tail` の数が 0 でないときはそもそも `Turing<tail...>` を展開しないようにするために利用しています。これにより `template <int head = 0, ...>` のような無意味なデフォルト引数が必要なくなります。 (無意味でなかったならごめんなさい) 。
|
11
11
|
|
12
|
-
`template` キーワードのこの使い方については [依存名に対するtypenameとtemplateの制限緩和 - cpprefjp C++日本語リファレンス](https://cpprefjp.github.io/lang/cpp11/dependent_name_specifier_outside_of_templates.html) で知りました。もっと直接的にこれに触れているサイトもあると思いますが、参考までに。
|
13
|
-
|
14
12
|
```cpp
|
15
13
|
#include <iostream>
|
16
14
|
|
1
少し丁寧に
answer
CHANGED
@@ -1,10 +1,16 @@
|
|
1
|
-
`expected expression` の直接的な原因は、テンプレート引数
|
1
|
+
`expected expression` の直接的な原因は、メンバ関数呼び出しの部分のテンプレート引数が正しくテンプレート引数として扱われていないことにあります。こういう場合、メンバ関数テンプレート名の前に `template` をつける必要があります。
|
2
2
|
|
3
|
+
```cpp
|
3
|
-
|
4
|
+
map_double().template cons<head*2>();
|
4
|
-
|
5
|
+
```
|
5
6
|
|
6
|
-
|
7
|
+
どうパースされているのかまでは私には分からないのですが、不等号か何かかと思っているのでしょうね?
|
7
8
|
|
9
|
+
この記法を使って修正したコードが次です。
|
10
|
+
なお、 `if constexpr` 式は `tail` の数が 0 でないときはそもそも `Turing<tail...>` を展開しないようにするために利用しています。これにより `template <int head = 0, ...>` のような無意味なデフォルト引数が必要なくなります。 (無意味でなかったならごめんなさい) 。
|
11
|
+
|
12
|
+
`template` キーワードのこの使い方については [依存名に対するtypenameとtemplateの制限緩和 - cpprefjp C++日本語リファレンス](https://cpprefjp.github.io/lang/cpp11/dependent_name_specifier_outside_of_templates.html) で知りました。もっと直接的にこれに触れているサイトもあると思いますが、参考までに。
|
13
|
+
|
8
14
|
```cpp
|
9
15
|
#include <iostream>
|
10
16
|
|
@@ -37,5 +43,4 @@
|
|
37
43
|
a.print();
|
38
44
|
return 0;
|
39
45
|
}
|
40
|
-
|
41
46
|
```
|