#include<iostream>
int fact(int n,int v=1){
    if(n==0)return v;
    else return fact(n-1,v*n);
}
int main(){
    std::cout << fact(3);
}
>>653
g++ -O3 で末尾再帰は最適化されました。VCでも同じです。何が直さないのでしょうか?