デジタルちんぶろぐ

デジタルな話題

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  268  : 記事  0  : コメント  4146  : トラックバック  79

ニュース


技術以外は
ちんぶろぐ

記事カテゴリ

書庫

日記カテゴリ

VCでは以下のコードが通ってしまいます。

template<typename int n> struct hoge {
    …
};

intはtypenameだから通っちゃうのかな?と思いましたが、そんな問題じゃないみたいです。以下のコードも通りました。

template<typename typename int n> struct hoge {
    …
};

 

上記のようなコードがエラーにならないんですから、以下のような通常の3倍typenameを強調するコードも通っちゃいます。

template<typename typename typename T = char> struct Casval {
    …
};

通常typenameを重ねて書く人はいないと思うので下の2つに関しては実害が無いと思いますが、本来typenameを書いてはいけない場所に記述してもエラーにならないため、誤ったtypename指定のされたコードを作成してしまい他のコンパイラでエラーになる可能性があります。
実際上記のコードはg++(3.4/4.3)ではエラーになりました。

 

また、class templateだけでなく下記のように関数templateでも多重typename指定がエラーになりません。

template<typename typename T> void func2(typename typename typename typename typename int a) {}
template<typename class T> void func3(typename typename typename typename typename int a) {}

 

コンパイル時に/Wallを指定しても上記の部分に関しては警告すら出ませんでした。尚、このコードの検証はVC8/9で行いました。

投稿日時 : 2009年5月27日 22:46

コメント

# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/28 0:28 T.Hirase
しょ、笑撃です!
どこかに「このコンパイル結果は、フィクションです」とか「これはコンパイル結果イメージ映像です」とか書いてないですか???


# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/28 0:32 アキラ
なんだってーw
VCはtypenameのチェックをもっときびしくするべきです…。

# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/28 1:03 あんどちん
Variadic typenameってタイトルにした方が良かったかな?

>> T.Hiraseさん
書いてないですね。そんなに害悪じゃないからプログラマが”正しい”コードを書くように気をつければよいだけですw

>> アキラさん
このゆるさがいいのにw



# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/28 9:34 hito
おや、書けないのでもう一度。

これはひどい。
まあ、実害はそんなにないんでしょうが。

# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/28 11:54 zak
(ノ∀`)ノ∀`)ノ∀`)ジェットストリームアチャー

VC10βで追試してみました。
結果は一緒でした。

流石MS。これはひどい。

# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/28 13:25 あんどちん
>> hitoさん
正しいソースのコンパイルが出来ないわけではないので実害は少ないと思います。

>> zakさん
追試ありがとうございます。
これとは逆にtypenameを付けるべき場所に付けなくてもコンパイルが通るというバグもあるのですが、そちらの修正も後回しみたいなのでこれが直っている事はないだろうな?と思っていました。
https://connect.microsoft.com/VisualStudioJapan/feedback/ViewFeedback.aspx?FeedbackID=403295

MS=Mobile Suitですねw


# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/28 17:54 zak
> 通常の3倍typename
ここに反応しろという声が聞こえたものでw

同僚に見せたら死んでました。

# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/29 0:06 あんどちん
> 同僚に見せたら死んでました。
デリケートなお方だw
誰にも*ほぼ*実害無いのに

これって意外な盲点だったと思うんですよね。MSにとっても。


# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/29 4:19 hito
template < typename typename typename typename typename typename typename typename typename typename T >
typename typename typename typename typename typename typename typename typename typename T
f( typename typename typename typename typename typename typename typename typename typename T )
{
return typename typename typename typename typename typename typename typename typename typename T() ;
}

int main()
{
f< typename typename typename typename typename typename typename typename typename typename int >(0) ;
}

これが問題なく通ります。もうわけが分からなくなってきました。

# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/29 9:08 あんどちん
>> hitoさん
template宣言におけるtypenameの解釈が曖昧だと思っていたのですが、templateを使用する部分(F<...int>(0))でもtypenameが使用できるんですね。そこは検証してませんでした。
益々ただの飾り扱いが濃厚だなぁ…でも、templateではないところでtypenameを記述すると「template宣言じゃないよ」みたいなエラーが出たので
int func(typename int n);
はエラーになるんですよね。

つーかですね、2つでいいのにtypename付け過ぎですw。ここまで書くとVCをおちょくってるような感じがして少しVCが可哀想になってきました。
# でもtypenameいくつまでネストできるか検証してみようかなw

# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/29 9:10 zak
>デリケートなお方だw
ぃや、笑い死んだ方ですw

>typename typename typename typename typename typename typename typename typename typename
typenameがゲシュタルト崩壊しました。
あと、typenamephiliaなんて造語が脳内にあらわれて困っています。何とかしてくださいw

ん・・・確かに通りました。
ここまでやると何か面白い展開がでてきそうな気がしてきました。

# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/29 11:42 あんどちん
> typenamephilia
-philiaを英辞朗でググって(不適切な用法)ちょっとブルーな気分になった。
# 究極のEcosystemを例に出さずとも他に無かったのかなぁ…-philiacの例。

何回typenameを記述できるか試してみたんですが、10万回以上書けたのでそれ以上調べるのを止めてしまいました。事実上何回でも書けると思っていいみたいです。まぁ便利!?

そして実害が無いと言いながらも結局報告してしまった…
https://connect.microsoft.com/VisualStudioJapan/feedback/ViewFeedback.aspx?FeedbackID=460427
# あぁ、名前がSuper_Andochinに…変え方がわからないんだよォ


# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/29 13:15 hito
>益々ただの飾り扱いが濃厚だなぁ
VCにおいては、typenameなど飾りでしょう。

VCの実装は未だに、two phase Lookupではありません。
明らかに、インスタンス化されたときにすべての名前解決をしています。
そういう規格違反の実装では、名前解決する時には、dependent nameが型か値かは完全に分かるので、
typenameで、明示的に型であると知らせてやる必要はないのです。

# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/29 13:20 zac
>philia
http://ja.wiktionary.org/wiki/-philia
語源のほうで・・・とフォローしようと思ったら

>10万回
フォローできませんでした。本t(r
#100回くらいで"まぁいいか"と思いましたよ。
#まさかその1000倍いくとは・・・!

# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/29 13:31 あんどちん
>> hitoさん
なるほど。インスタンス化するときに名前解決しているのであればtypenameは不要ですから飾り扱いでも不思議じゃないですね。
# だからといって何回書いてもエラーにならないを放っておくのはどうかと思いますけど
ただ、typename=飾りだとしてもtypenameというキーワードを判断しているはずなのでプリプロセッサで消している訳でもないのなら多重指定のエラーは出してほしいなぁ…

規格には疎いのですがtwo phase lookupで実装することは規格で決まっているのでしょうか?
正直なところtypenameを書かなくても型であることを判断してくれるなら、その方がプログラマに優しいんじゃないの?と思ったりもするわけですが^^;


# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/29 13:41 あんどちん
>> zacさん
# zakさんのtypoかな?
> philia
勘違いしていたんですが、英辞朗じゃなくて串刺検索で出てきた研究社の方に出てる例がcoprophiliac
# パンチの効いた辞書だなぁw

10万回の方は
template<typename
typename
typename

typename
int v> struct st {
で宣言して間のtypename+改行を1000行単位くらいでコピペして作ったので楽でした。
恐らくメモリの許す限り書けるんだろうと思います。

# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/29 20:54 haru-s
ワロタ
偉い人にはわからんのですね

# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2009/05/30 3:54 あんどちん
> 偉い人にはわからんのですね
そこのパロディのタイトルなんですが、冷静に考えたらVC=MS=偉い人だったんじゃないの?という疑念が生まれたのは内緒ですw

# 
Twitter Trackbacks for

[C++] typename ?????????????????????????????????VC???????????????????????????????????????
[wankuma.com]
on Topsy.com
2010/09/10 1:18 Pingback/TrackBack

Twitter Trackbacks for

[C++] typename ?????????????????????????????????VC???????????????????????????????????????
[wankuma.com]
on Topsy.com


# バーバリー バッグ 2012/11/06 16:56 http://burberry.suppa.jp/
はじめまして。突然のコメント。失礼しました。

# re: [C++] typename なんてただの飾りです。VCにはそれがわかっています。 2018/08/28 12:06 wwwe
http://www.redbottom-shoes.us.com
http://www.offwhitehoodie.us.com
http://www.kobeshoes.uk
http://www.nike-huarache.com
http://www.nikereact.org
http://www.jordan-retro.us.com
http://www.pradasunglasses.us.org


Post Feedback

タイトル
名前
Url:
コメント: