コンパイラを殺す方法
とてもくだらないこと
方法1.自分への参照
用意するもの
struct hoge { hoge& me() { return *this; } // 自分への参照を返す void hello() const { std::cout << "Hello" << std::endl; } };
それで、こう使います
int main() { hoge().me().me().me().me().me().me().me().me().me().me().hello(); return 0; }
さて、コンパイラはこのme()の連鎖にどれくらい耐えられるでしょうか
・
・
・
7995回でコンパイラが内部エラーになりました
fatal error C1001: コンパイラで内部エラーが発生しました。
この問題を回避するには、上記の場所付近のプログラムを単純化するか変更してください。
とてもくだらない。。。。
方法2.再帰テンプレート
用意するもの
// 指定された値〜0までの合計を計算 template <int n> struct sum { enum { value = n + sum<n - 1>::value }; }; template <> struct sum<0> { enum { value = 0 }; };
使い方
int main() { cout << sum<10>::value << endl; // 55 return 0; }
さて、何回の再帰に耐えられるでしょうか
・
・
・
sum<490>::value
これでコンパイラが内部エラーになりました
再帰テンプレートはあまり大きな計算には向かないようですね
(実際は値の計算に使うことは多くないでしょうが)