回答編集履歴
2
refinement
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[C++11で導入された`decltype`](https://cpprefjp.github.io/lang/cpp11/decltype.html)は、2003年の [n1478](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1478.pdf) 初版から最終的に2007年の [n2343](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf) (Revision 7)まで、長い期間
|
1
|
+
[C++11で導入された`decltype`](https://cpprefjp.github.io/lang/cpp11/decltype.html)は、2003年の [n1478](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1478.pdf) 初版から最終的に2007年の [n2343](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf) (Revision 7)まで、長い期間議論された後に正式採用された言語機能だったようです。
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -42,7 +42,7 @@
|
|
42
42
|
|
43
43
|
|
44
44
|
|
45
|
-
変数`a`に対して`decltype(a)`と`decltype((a))`をどのように扱うかについては、議論を重ねる中で変遷があったようです。
|
45
|
+
変数`a`に対して`decltype(a)`と`decltype((a))`をどのように扱うかについては、C++11での正式採用に向けて議論を重ねる中でも変遷があったようです。
|
46
46
|
|
47
47
|
- 2004年 [n1705](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1705.pdf) (Revision 4)では「`decltype((e))`は`decltype(e)`と同じと明記する」
|
48
48
|
|
1
update
test
CHANGED
@@ -8,21 +8,13 @@
|
|
8
8
|
|
9
9
|
> 2.2 Semantics of `decltype`
|
10
10
|
|
11
|
-
> Determining the type `decltype(e)` build on a single guiding principle: **look for the declared type of the expression `e`.** If `e` is a variable or formal parameter, or a function/operator invocation, the programmer can trace down the variable's, parameter's, or function's declaration, and **find the type declared for the particular entity directly from the program text**. This type is the result of `decltype`. For expressions that do not have a declaration in the program text, such as literals and calls to built-in operators, lvalueness implies a reference type.
|
11
|
+
> Determining the type `decltype(e)` build on a single guiding principle: **look for the declared type of the expression `e`.** If `e` is a variable or formal parameter, or a function/operator invocation, the programmer can trace down the variable's, parameter's, or function's declaration, and **find the type declared for the particular entity directly from the program text**. This type is the result of `decltype`. **For expressions that do not have a declaration in the program text, such as literals and calls to built-in operators, lvalueness implies a reference type**.
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
変数`a`に対して`decltype(a)`と`decltype((a))`をどのように扱うかについては、議論を重ねる中で変遷があったようです。
|
16
|
-
|
17
|
-
- 2004年 [n1705](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1705.pdf) (Revision 4)では「`decltype((e))`は`decltype(e)`と同じと明記する」
|
18
|
-
|
19
|
-
- 2006年 [n2115](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2115.pdf)(Revision 6)では「`decltype((e))`と`decltype(e)`は別扱いとする」
|
20
|
-
|
21
|
-
|
15
|
+
この考え方を質問中コードに適用すると、次の通りとなります。
|
22
16
|
|
23
17
|
|
24
|
-
|
25
|
-
----
|
26
18
|
|
27
19
|
```c++
|
28
20
|
|
@@ -41,3 +33,19 @@
|
|
41
33
|
// 式(a) の宣言はソースコードに出現しない → int&
|
42
34
|
|
43
35
|
```
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
----
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
変数`a`に対して`decltype(a)`と`decltype((a))`をどのように扱うかについては、議論を重ねる中で変遷があったようです。
|
46
|
+
|
47
|
+
- 2004年 [n1705](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1705.pdf) (Revision 4)では「`decltype((e))`は`decltype(e)`と同じと明記する」
|
48
|
+
|
49
|
+
- 2006年 [n2115](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2115.pdf) (Revision 6)では「`decltype((e))`と`decltype(e)`は別扱いとする」
|
50
|
+
|
51
|
+
- 最終的に「`decltype((e))`と`decltype(e)`は別扱い」のまま決着したようです。
|