以下は、コンパイル時に階乗を計算するC++プログラムで、C++03標準に準拠している。

```cpp
template<unsigned int N>
unsigned int fac() {
    return fac<N-1>() * N;
};

template<>
unsigned int fac<0>() {
    return 1;
}
```

テンプレートとテンプレート特殊化を使用して、fac<N-1>()*Nを返す関数fac<N>()を定義する。
Here is a a C++ program that computes a factorial at compile time, that is compliant with the C++03 standard.

```cpp
template<unsigned int N>
unsigned int fac() {
    return fac<N-1>() * N;
};

template<>
unsigned int fac<0>() {
    return 1;
}
```

Using templates and template specialization we define a function fac<N>() which returns fac<N-1>()*N, specializing the case where N = 0 to return 1.