Ну а к чему был пример про <string>? Ведь шаблоны в С++ - это тоже вид статического метапрограммирования. Я думал, Вы так выступили против него.
> -- Цитата:
> КОД ПРОГРАММЫ и есть тот самый формализм, который, вроде как, должен позволять фиксировать ПРОЕКТНЫЕ РЕШЕНИЯ. А за счёт формальностей, мы сможем эти решения проверить на этапе компиляции.
Ну это только в идеальном мире. В реальном код лишь воплощает проектные решения, а зафиксированы они где-то в другом месте. Если мы оптимизируем под объём, то раздувать нельзя. Современные ЯП (включая даже мой любимый лисп) недостаточно совершенны, чтобы можно было писать на высоком уровне, в проектных спецификациях, а потом компилятор сам генерировал на основании этого оптимизированный и надёжный код, соответствующий им. Поэтому на этапе воплощения неизбежна ручная работа. Конечно, если gcс уже настолько умён, что сумеет ваши динамические инициализаторы вычислить во время компиляции, то вам может повезти, но Вы тогда становитесь заложником алгоритмов gcc, а они не слишком уж прозрачны. Впрочем, я не сишник, могу чего-то не знать, но в целом обычно оптимизирующий компилятор оптимизирован и по времени компиляции. Он действует на основе эвристик. И, чем сложнее случай, тем менее тщательно он будет оптимизировать (чтобы избежать комбинаторного взрыва времени компиляции). Поэтому нет гарантии, что после изменения одной строчки какой-то конкретный случай применения  оптимизации не отвалится.

Статическое метапрограммирование - это набор техник, включая шаблонизацию, представление деревьев кода (в лиспе есть и удобно для использования, про другие языки сомневаюсь, что удобно, хотя есть во многих), проверку типов, оптимизацию. Но поскольку инструментов, которые генерировали бы такие контейнеры, я не знаю, то остаётся генерировать шаблонами только требования (да можно их тоже вручную сгенерировать) и набор тестов (который не обязательно должен быть оптимальным по размеру). А код каждого контейнера писать руками и нарабатывать священную "библиотеку типовых решений". Если, конечно, в одном и том же приложении нужны все виды контейнеров, то динамическая параметризация может стать просто единственно возможным решением по ограничениям размера.