以下は、C++03の機能だけを使ってコンパイル時に数の階乗を計算するC++のプログラムである：

```
#include <iostream>

template<int N>
struct Factorial {
    enum { value = N * Factorial<N - 1>::value };
};

template<>
struct Factorial<0> {
    enum { value = 1 };
};

int main() {
    std::cout << Factorial<5>::value << std::endl;
    return 0;
}
```

このプログラムは階乗を計算するために再帰的なテンプレート構造を使用している。Factorial テンプレートは N が 0 の場合に特化したもので、その値は 1 です。一般的なテンプレートは、N に (N - 1) の階乗を掛けることでN の階乗を計算します。

計算はコンパイル時に実行されるため、実行時のオーバーヘッドはありません。最終結果はプログラム中に定数として格納されるので、簡単にアクセスできる。
Here's a program in C++ that computes the factorial of a number at compile time using only C++03 features:

#include <iostream>

template<int N>
struct Factorial {
    enum { value = N * Factorial<N - 1>::value };
};

template<>
struct Factorial<0> {
    enum { value = 1 };
};

int main() {
    std::cout << Factorial<5>::value << std::endl;
    return 0;
}
This program uses a recursive template structure to calculate the factorial. The Factorial template has a specialization for the case where N is 0, with a value of 1. The general template calculates N factorial by multiplying N with (N - 1) factorial, which is computed by recursively instantiating the Factorial template with N - 1.

The calculation is performed at compile-time, so there is no runtime overhead. The final result is stored as a constant in the program, so it can be easily accessed.