teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

§14\.1\.12

2016/04/13 17:14

投稿

yumetodo
yumetodo

スコア5852

answer CHANGED
@@ -14,4 +14,18 @@
14
14
 
15
15
  それだ!。さて問題はこれ、規格書のどこに該当するかだな。
16
16
 
17
- というかそのサイト私も何回も見てるはずなのになんで思い出せなかったかなぁ・・・。
17
+ というかそのサイト私も何回も見てるはずなのになんで思い出せなかったかなぁ・・・。
18
+
19
+ 追記3
20
+
21
+ コメントでもあるように確かにN4296やN4567には
22
+
23
+ A template-parameter shall not be given default arguments by two different declarations in the same scope.
24
+ [ Example:
25
+ ```cpp
26
+ template<class T = int> class X;
27
+ template<class T = int> class X { /... / }; // error
28
+ ```
29
+ —end example ]
30
+
31
+ という記載がありますね。

3

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

2016/04/13 17:14

投稿

yumetodo
yumetodo

スコア5852

answer CHANGED
@@ -6,4 +6,12 @@
6
6
  いやそうじゃないな。two-phase name look up 絡みだな。多分、``typename std::enable_if</*略*/>::type``を見る時、先頭のtypename から何らかの型なんだなと評価し
7
7
  ``typename = typename /*略*/``と認識する。でそうなるとシグネチャがどっちも同じと認識する、みたいな感じだと思う。ただtwo-phase name look upをざっと調べた感じどっちもdependent nameだと思うんだけど・・・あれ・・・?
8
8
 
9
- 推測なのでちょっと後で調べます。
9
+ 推測なのでちょっと後で調べます。
10
+
11
+ 追記2
12
+
13
+ >デフォルト・パラメータより先に型が評価されるようです。
14
+
15
+ それだ!。さて問題はこれ、規格書のどこに該当するかだな。
16
+
17
+ というかそのサイト私も何回も見てるはずなのになんで思い出せなかったかなぁ・・・。

2

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

2016/04/12 14:28

投稿

yumetodo
yumetodo

スコア5852

answer CHANGED
@@ -4,6 +4,6 @@
4
4
  追記
5
5
 
6
6
  いやそうじゃないな。two-phase name look up 絡みだな。多分、``typename std::enable_if</*略*/>::type``を見る時、先頭のtypename から何らかの型なんだなと評価し
7
- ``typename = typename /*略*/``と認識する。でそうなるとシグネチャがどっちも同じと認識する、みたいな感じだと思う。
7
+ ``typename = typename /*略*/``と認識する。でそうなるとシグネチャがどっちも同じと認識する、みたいな感じだと思う。ただtwo-phase name look upをざっと調べた感じどっちもdependent nameだと思うんだけど・・・あれ・・・?
8
8
 
9
9
  推測なのでちょっと後で調べます。

1

two-phase name look up を疑う

2016/04/12 14:16

投稿

yumetodo
yumetodo

スコア5852

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