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.