Powyższy problem spowodowany jest tym, że błędy z reguły dotyczą sposobu użycia szablonu, natomiast diagnostyka włączana jest dopiero po jego konkretyzacji, a więc zasadniczo w innym miejscu niż szablon ten jest faktycznie używany. Stąd wrażenie, że błędy znajdują się w bibliotekach, a nie w programie, który ich błędnie używa.

Pewną receptą na powyższy problem są tzw. koncepty. Obecnie są one popularnym rozszerzeniem wielu kompilatorów.

Metaprogramowanie w C++ przy użyciu szablonów Jednym z prostszych przykładów metaprogramowania przy użyciu szablonów, jest szablon pozwalający na obliczenie wartości silni w czasie kompilacji.

#include <iostream>

template <int N> struct Silnia

enum { wartosc = N * Silnia<N-1>::wartosc };

template <> //specjalizacja kończy rekurencję struct Silnia<0>

enum { wartosc = 1 };

int main()

const int silnia4 = Silnia<4>::wartosc; //jest to równoważne: const int silnia4 = 24; std::cout << silnia4; return 0;

Pierwszy szablon Silnia parametryzowany jest typem int, wartość parametru przekazanego do szablonu jest następnie używana w definicji szablonu.