回答編集履歴

4

§14\.1\.12

2016/04/13 17:14

投稿

yumetodo
yumetodo

スコア5850

test CHANGED
@@ -31,3 +31,31 @@
31
31
 
32
32
 
33
33
  というかそのサイト私も何回も見てるはずなのになんで思い出せなかったかなぁ・・・。
34
+
35
+
36
+
37
+ 追記3
38
+
39
+
40
+
41
+ コメントでもあるように確かにN4296やN4567には
42
+
43
+
44
+
45
+ A template-parameter shall not be given default arguments by two different declarations in the same scope.
46
+
47
+ [ Example:
48
+
49
+ ```cpp
50
+
51
+ template<class T = int> class X;
52
+
53
+ template<class T = int> class X { /... / }; // error
54
+
55
+ ```
56
+
57
+ —end example ]
58
+
59
+
60
+
61
+ という記載がありますね。

3

two-phase name look upなんてなかった、いいね?

2016/04/13 17:14

投稿

yumetodo
yumetodo

スコア5850

test CHANGED
@@ -15,3 +15,19 @@
15
15
 
16
16
 
17
17
  推測なのでちょっと後で調べます。
18
+
19
+
20
+
21
+ 追記2
22
+
23
+
24
+
25
+ >デフォルト・パラメータより先に型が評価されるようです。
26
+
27
+
28
+
29
+ それだ!。さて問題はこれ、規格書のどこに該当するかだな。
30
+
31
+
32
+
33
+ というかそのサイト私も何回も見てるはずなのになんで思い出せなかったかなぁ・・・。

2

どっちもdependent nameじゃないのか・・・?

2016/04/12 14:28

投稿

yumetodo
yumetodo

スコア5850

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  いやそうじゃないな。two-phase name look up 絡みだな。多分、``typename std::enable_if</*略*/>::type``を見る時、先頭のtypename から何らかの型なんだなと評価し
12
12
 
13
- ``typename = typename /*略*/``と認識する。でそうなるとシグネチャがどっちも同じと認識する、みたいな感じだと思う。
13
+ ``typename = typename /*略*/``と認識する。でそうなるとシグネチャがどっちも同じと認識する、みたいな感じだと思う。ただtwo-phase name look upをざっと調べた感じどっちもdependent nameだと思うんだけど・・・あれ・・・?
14
14
 
15
15
 
16
16
 

1

two-phase name look up を疑う

2016/04/12 14:16

投稿

yumetodo
yumetodo

スコア5850

test CHANGED
@@ -1 +1,17 @@
1
1
  デフォルト引数に指定したものが違ったとしてもシグネチャがおなじになるということだと思うんだけど、規格書でtypenameとオーバーロード周りどうなってたかな・・・。
2
+
3
+
4
+
5
+
6
+
7
+ 追記
8
+
9
+
10
+
11
+ いやそうじゃないな。two-phase name look up 絡みだな。多分、``typename std::enable_if</*略*/>::type``を見る時、先頭のtypename から何らかの型なんだなと評価し
12
+
13
+ ``typename = typename /*略*/``と認識する。でそうなるとシグネチャがどっちも同じと認識する、みたいな感じだと思う。
14
+
15
+
16
+
17
+ 推測なのでちょっと後で調べます。