CTFE時にネストした関数から外側の関数の引数が正しく使えない.
- このフォーラムに新規トピックを投稿できます
- このフォーラムではゲスト投稿が許可されています
7件表示
(全7件)
すべてのコメント一覧へ
投稿ツリー







satoru_h
投稿数: 9

ネストした関数をCTFEで実行する時に外側の関数の引数が.init(or null)となる問題が発生しました.
Linux/dmd 2.042です.
他の環境では確認していません.
関数fをCTFEで実行すると,fの引数に関係なくassertに失敗します.
通常の実行では問題ありません.
CTFE時にネストした関数内部では外側の関数の引数がすべて.init(or null)になってしまっているようです.
とりあえず以下の様にすれば回避できます.
Linux/dmd 2.042です.
他の環境では確認していません.
auto f(string s)
{
return
{
assert(s);
};
}
関数fをCTFEで実行すると,fの引数に関係なくassertに失敗します.
通常の実行では問題ありません.
CTFE時にネストした関数内部では外側の関数の引数がすべて.init(or null)になってしまっているようです.
とりあえず以下の様にすれば回避できます.
auto f(string s_)
{
auto s = s_;
return
{
assert(s);
};
}
投票数:94
平均点:7.23
返信する
Re: CTFE時にネストした関数から外側の関数の引数が正しく使えない.
msg# 1.1
SHOO
投稿しました。
http://d.puremagic.com/issues/show_bug.cgi?id=4027
これでいいかな?
しかしあれですね、一度投稿してしまうと、バグ報告に躊躇いがなくなりますね。
http://d.puremagic.com/issues/show_bug.cgi?id=4027
これでいいかな?
しかしあれですね、一度投稿してしまうと、バグ報告に躊躇いがなくなりますね。
投票数:62
平均点:4.84
返信する
satoru_h
投稿数: 9

ありがとうございます.
投票数:53
平均点:4.15
返信する
tama
投稿数: 111

Donのreplyで「その回避策も駄目だよ」と書いてると思うんですが,例がそもそもコンパイルが通らないような…delegateの()による呼び出しがコンパイルタイムに呼べないことを言ってるのかな…?
どちらにせよ,バグじゃなくて現状サポートされてないようでorz
どちらにせよ,バグじゃなくて現状サポートされてないようでorz
投票数:72
平均点:5.28
返信する
satoru_h
投稿数: 9

失礼しました.
コードが不完全でした.
#code(d){{{
auto f(string s)
{
return { return s; };
}
auto run(string delegate() f)
{
return f();
}
unittest
{
static assert(run(f("aaa")) == "aaa");
}}}
このコードの様にdelegateの呼び出しができない問題は回避していました.
また,http://dusers.dip.jp/modules/forum/index.php?topic_id=61 の問題はこの回避策が引き起こしているようで,それはそれでダメなのでした.
コードが不完全でした.
#code(d){{{
auto f(string s)
{
return { return s; };
}
auto run(string delegate() f)
{
return f();
}
unittest
{
static assert(run(f("aaa")) == "aaa");
}}}
このコードの様にdelegateの呼び出しができない問題は回避していました.
また,http://dusers.dip.jp/modules/forum/index.php?topic_id=61 の問題はこの回避策が引き起こしているようで,それはそれでダメなのでした.
投票数:69
平均点:3.19
返信する
SHOO
投稿数: 658

どうやらWalter氏が頑張ってくれたようですね。
ネット環境が無いのでDL試せていませんが、エラーメッセージを表示する方向で話がついたのでしょうか?
投票数:36
平均点:4.17
返信する
SHOO
投稿数: 658

http://dusers.dip.jp/modules/forum/index.php?topic_id=63
http://www.digitalmars.com/d/2.0/changelog.html#new2_043
解決しました。どうやら仕様外のため、コンパイルエラーを吐くようにしたみたいですね。
http://www.digitalmars.com/d/2.0/changelog.html#new2_043
解決しました。どうやら仕様外のため、コンパイルエラーを吐くようにしたみたいですね。
投票数:32
平均点:5.31
返信する
7件表示
(全0件)
すべてのコメント一覧へ