New paper: N3744, Proposing pure—Walter Brown 関数が外部の変数を変更しない「純粋関数(pure function)」であることをコンパイラに伝える、pure属性を入れよう、という提案。 関数が引数のみに依存して結果を生成するようになると、状態変化によるバグの混入が起こらなくなるので、これはぜひほしいですね。 GCCにはだいぶ前から、__pure__属性があります。それとD言語にも。 標準ライブラリで純粋関数にならない例としては、以下のようなものがあります: printf : I/Oは副作用である tan : グローバル変数であるerrnoを更新する longjmp : 関数のreturnに失敗する mersenne_twister_engine<>::operator() : メンバ変数として持っている状態を更新する New paper: N3