Там какой-либо путь состоит в том, чтобы проверить шаг за шагом, что продолжается в скажем, шаблоне? Я имею в виду, как это инстанцируют шаг за шагом и так далее?
В книге я упомянул здесь,
Я нашел (2 минуты назад) довольно интересный пример того, как двоичный файл мог быть реализован как метафункция.
template
struct binary
{
static unsigned const value
= binary::value << 1 // prepend higher bits
| N%10; // to lowest bit
};
template <> // specialization
struct binary<0> // terminates recursion
{
static unsigned const value = 0;
};
и я думаю, что могло быть довольно полезно смочь видеть шаг за шагом, что было сделано во время инстанцирования этого шаблона. Спасибо за Ваши ответы.
Лучшее, что я видел на данный момент, это исследовательская работа по Templight, но я не знаю о какой-либо публичной реализации.
Вы можете значительно помочь себе, используя описательные статические (т.е. во время компиляции) утверждения - смотрите, например, Boosts static assert или MPLs assert. В некоторых случаях может помочь провоцирование ошибки компиляции (например, с помощью статических утверждений), чтобы получить от компилятора трассировку инстанцирования шаблона.
Также ничто не мешает выводить результаты метафункций во время выполнения для тестирования.