オーバーロード失敗

OLL llpow(LL n, size_t m){
  return llpow(OLL(n), m);
}
OLL llpow(OLL n, size_t m){
  if(m == 0) return OLL(1);
  if(m == 1) return n;
  return mul(n, llpow(n, m - 1));
}

コンパイルエラーになって悩んだ。これ上のllpowの時点では上のllpowしか定義されていないのでオーバーロードになっていないということね。順序を変えたらOK。相互に参照しているときはきっとプロトタイプ宣言とかをする必要があるだろう。