回答編集履歴
3
fix typo
answer
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
1. `thread`型の**変数**`th3`の宣言。同変数を`bar2`型の一時オブジェクト`bar2()`を指定して初期化する。
|
10
10
|
2. 戻り値が`thread`型かつ引数に“戻り値型`bar2`かつ引数を取らない関数へのポインタ型”をとる**関数**`th3`のプロトタイプ宣言。
|
11
11
|
|
12
|
-
註:厳密には「式または宣言のいずれにも解釈可能なときは、宣言を優先する」というルールです。本例では`bar2()`部分がオブジェクト構築の式もしくは関数型宣言と解釈可能なため、構文
|
12
|
+
註:厳密には「式または宣言のいずれにも解釈可能なときは、宣言を優先する」というルールです。本例では`bar2()`部分がオブジェクト構築の式もしくは関数型宣言と解釈可能なため、構文解釈が曖昧となります。分かり易さのため、上記説明で理解してもさほど間違いないと思います。
|
13
13
|
|
14
14
|
---
|
15
15
|
下記いずれかの解決方法があります。いずれの方法も「関数プロトタイプ宣言としては解釈できない」ようにし、曖昧さをなくしています。
|
2
appendix
answer
CHANGED
@@ -9,6 +9,8 @@
|
|
9
9
|
1. `thread`型の**変数**`th3`の宣言。同変数を`bar2`型の一時オブジェクト`bar2()`を指定して初期化する。
|
10
10
|
2. 戻り値が`thread`型かつ引数に“戻り値型`bar2`かつ引数を取らない関数へのポインタ型”をとる**関数**`th3`のプロトタイプ宣言。
|
11
11
|
|
12
|
+
註:厳密には「式または宣言のいずれにも解釈可能なときは、宣言を優先する」というルールです。本例では`bar2()`部分がオブジェクト構築の式もしくは関数型宣言と解釈可能なため、構文上の解釈が解釈になります。分かり易さのため、上の説明で理解してもさほど間違いないと思います。
|
13
|
+
|
12
14
|
---
|
13
15
|
下記いずれかの解決方法があります。いずれの方法も「関数プロトタイプ宣言としては解釈できない」ようにし、曖昧さをなくしています。
|
14
16
|
|
1
add link to wikipedia
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
> 何が起きていてのエラーなのか、もしわかればC++11の理解が進み大変助かります。
|
2
2
|
|
3
|
-
これはC++11以前からC++言語に存在する「Most Vexing Parse」と呼ばれる問題です。直訳すれば「最も苛立たしい構文解析」でしょか。
|
3
|
+
これはC++11以前からC++言語に存在する「[Most Vexing Parse](https://en.wikipedia.org/wiki/Most_vexing_parse)」と呼ばれる問題です。直訳すれば「最も苛立たしい構文解析」でしょか。
|
4
4
|
|
5
5
|
> `thread th3(bar2());`
|
6
6
|
|