回答編集履歴

2

refinement

2019/06/07 13:05

投稿

yohhoy
yohhoy

スコア6191

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

2019/06/07 13:05

投稿

yohhoy
yohhoy

スコア6191

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
- - 最終的「`decltype((e))``decltype(e)`は別扱い」のまま決着したようです。
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)`は別扱い」のまま決着したようです。