Recentemente ho scritto una meta funzione C ++ piuttosto complessa che si riduce a:
template <size_t N, typename val>
struct Rec {
using type = typename std::conditional<N == 0,
val,
typename Rec<N - 1, val>::type>::type;
};
Sia Clang che G ++ barf su questo tipo di recessione, affermando che, "La profondità di istanziazione del template supera il massimo di X". Ho riscritto rapidamente il programma e risolto il problema, ma mi ha fatto riflettere sulla strategia di valutazione dei parametri del modello C ++.
C'è qualcosa nello standard C ++ che impedirebbe ai template di utilizzare la chiamata in base alla necessità di valutare i parametri del modello, o questa limitazione è puramente un difetto di implementazione?