누군가 첫 번째 템플릿 메타 프로그래밍 방식이 무한 루프가되는 이유를 설명해 줄 수 있지만 두 번째 템플릿은 올바르게 실행됩니다.
#include <iostream>
using namespace std;
template<int N, int M>
struct commondivs {
static const int val = (N<M) ? commondivs<N,(M-N)>::val : commondivs<(N-M),M>::val;
};
template<int N>
struct commondivs<N,N> {
static const int val = N;
};
int commondiv(int N, int M){
if(N==M){
return N;
}
return (N<M)?commondiv(N,(M-N)):commondiv((N-M),M);
}
int main() {
cout << commondivs<9,6>::val << endl;
cout << commondiv(9,6) << endl;
return 0;
}
constexpr
옵션이 아닙니다.
constexpr
옵션이 아닌 것을 명시 적으로 만들기 위해 c ++ 98 태그를 추가했습니다 . (C ++ 11에서 소개되었습니다). 기존 답변이 무효화됩니다. Exxul, 어떤 C ++ 버전으로 제한되어 있는지 명확히하십시오.