2013. Do library implementers have the freedom to add constexpr?

0
kentn @kentdotn

あ、いいこと思いついた。実装依存のconstexprがわりを導入してそっちを使えばいいんだ!(いいのか?)

2013-10-22 18:26:21
kentn @kentdotn

__attribute__((constexpr))

2013-10-22 18:26:47
狂える中3女子ボレロ村上/陶芸C++er @bolero_MURAKAMI

. @kentdotn 式展開のような最適化は、コードの意味が変わらない限り合法です。

2013-10-22 18:27:52
狂える中3女子ボレロ村上/陶芸C++er @bolero_MURAKAMI

いちおう補足しておくと、あの記事ではぼくは標準ライブラリの方針がクソで劣っているという主張であって、constexpr がクソであるとは言ってはおりませぬ。実際クソな点は多々あるけども。

2013-10-22 18:30:39
Akso de la Malbono @Cryolite

え,っていうか N3788 というか CWG DR 2013 にちゃんと論拠を説明した一文が書いてあるのに,そこをまったく理解しないまま, constexpr を勝手に付けてはいけないという方針に反対してたの!? さすがに DR の論旨をちゃんと理解した上で議論すべきでは…….

2013-10-22 18:44:37
Akso de la Malbono @Cryolite

http://t.co/Cucbg6NgPA "..., as users may use SFINAE to observe different behavior from otherwise identical code."

2013-10-22 18:47:31
kentn @kentdotn

(解説待ってました)

2013-10-22 18:49:10
Akso de la Malbono @Cryolite

実用的にはともかく,少なくとも純粋に theoretical な議論では確かに勝手に constexpr を付けるのは非常に恐ろしいというのが良く理解できる.

2013-10-22 18:50:09
Akso de la Malbono @Cryolite

うーん, template がチューリング完全とかは別に全然怖いとは思わないんだけれど,とにかく SFINAE の強力さが怖いなー.こいつの存在が C++ の規格の多くの部分に対して慎重な検討を要求する元凶になってる感じがある. introspection 怖い.

2013-10-22 19:00:44
Akso de la Malbono @Cryolite

introspection って run-time のものを指すのか.静的なものってなんて呼べばよいのけー?

2013-10-22 19:01:25
Akso de la Malbono @Cryolite

「ラムダ式が constant expression になれないのはクソ」「それに関しては SFINAE があるので慎重に考えないといけない」

2013-10-22 19:02:29
普通のC++使い、銀天すばる @SubaruG

SFINAE は強力すぎるし、バグの温床にもなりえる(だって本来は ill-formed で弾かれるべきなのに、黙ってデフォルトの方に行っちゃうんだもん…)ので、僕はあんまり好きじゃないですね。 使うけど。

2013-10-22 19:02:35
Akso de la Malbono @Cryolite

「標準ライブラリの関数に対して constexpr を付与する自由がないのはクソ」「それに関しては SFINAE があるので慎重に考えないといけない」

2013-10-22 19:03:10
狂える中3女子ボレロ村上/陶芸C++er @bolero_MURAKAMI

@Cryolite その一文というのは"as users may use SFINAE to observe different behavior..."のあたりだと思うんですが、具体的にどういうケースでSFINAEが問題になるかちょっとわからないので教えていただけますか?

2013-10-22 19:08:15
Akso de la Malbono @Cryolite

@bolero_MURAKAMI theoretical な言い方で単純化すると,「well-formed な user code の observable behavior が,標準ライブラリの実装によって変化しうる」.

2013-10-22 19:11:29
狂える中3女子ボレロ村上/陶芸C++er @bolero_MURAKAMI

@Cryolite 例えば、constexprの有無によってこのようなSFINAEが書けてしまうし、標準ライブラリの実装によって挙動が変わるのは問題である、という理解でよろしいですか? http://t.co/7EQUSdB7Re 違ったら済みません

2013-10-22 19:17:18
にゃははー仙人 @Flast_RO

SFINAEで挙動変わりそうな気はしないでもないが、じゃぁ例示しろって言われてもわからん...

2013-10-22 19:17:37
Akso de la Malbono @Cryolite

うわあああああぁぁぁぁぁ!!!!! well-formed な user code の observable behavior が GCC http://t.co/MCysoQbR7d と clang http://t.co/NtwGxWdu2t で変化したぞ!!!!!

2013-10-22 19:17:45
Akso de la Malbono @Cryolite

"..., as users may use SFINAE to observe different behavior(略)" の一文で,この手のコードに関して議論してるんだなっていうのを理解してあげないと,(C++ の規格の議論は)難しい.

2013-10-22 19:19:27
Akso de la Malbono @Cryolite

ちなみに私も CWG DR 2013 の PR にはやや反対な立場ですが,反対するにしても相手側がどういう rationale を背景にしているのかをちゃんと理解しておかないと議論の道筋を誤るので,こういうことは大事です.

2013-10-22 19:25:05
狂える中3女子ボレロ村上/陶芸C++er @bolero_MURAKAMI

この手のSFINAEはしかし、僕は書けて然るべきと思っているのでうーん…… 罠になり得るというのはよく分かるけども、規格違反にすれば良いというのはやはり現実的な解決になってないのでは。

2013-10-22 19:27:00
kentn @kentdotn

なるほど・・・constexprとSFINAEでテンプレートの定数パラメータまで一気に繋がる能力がない人(わたくし)にはついていけない世界だなあ。闇の住人たち怖い。

2013-10-22 19:27:27