謎's キッチン

謎のひとりごと。Amazon欲しい物リストはこちら: https://www.amazon.co.jp/hz/wishlist/ls/CCPOV7C6JTD2

全体として見て副作用が無いように見えれば無いのと同じ

なわけなのに…

struct A{
  int i;
  void setI(int i){
    this.i = i;
  }
}

A foo(){
  A a;
  a.setI(10); // setI関数が単体としては純粋関数でないばっかりに
  return a;
}

void main(){
  enum a = foo(); // これがエラーになるのが納得できん。
}

http://gcc.gnu.org/ml/gcc/2008-11/msg00357.html via http://shinh.skr.jp/m/?date=20081129#p02 でいうところのmodifies the object stateに当たるなぁ。
ところで上記のmodifies a function parameterはrefやoutのことだろうか。なら普通にpureな気が。

本当か? setIもx+=1;と同様にコンパイル時評価できるはず。ただのDMDのバグじゃね?
あと純粋関数の定義ってなんだっけ? 構造体自体を出力と考えればmodifies the object stateも純粋関数と呼べる? (当然renamingはあるとして=シングルスレッドで)


ポインタ先を変えるのは問題だが、全てが変数の代入を含めイベント駆動の場合はそれでもコンパイル時実行可能?