Bonjour a toutes et a tous ,
J'ai copié collé ce code sur le site que j'étudie , pour m'apercevoir qu'il y a l'air d'avoir une erreur de portée.
Voici le code :
#include <iostream>
#include <limits>

template <typename T, typename Predicat>
void entree_securisee(T & variable, Predicat predicat)
{
    while (!(std::cin >> jour) || !predicat(variable))
    {
        if (std::cin.eof())
        {
            throw std::runtime_error("Le flux a été fermé !");
        }
        else if (std::cin.fail())
        {
            std::cout << "Entrée invalide. Recommence." << std::endl;
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
        else
        {
            std::cout << "Le prédicat n'est pas respecté !" << std::endl;
        }
    }
}

int main()
{
    int jour { 0 };
    std::cout << "Quel jour es-tu né ? ";
    entree_securisee(jour, [](int jour) -> bool { return jour > 0 && jour <= 31; });

    int mois { 0 };
    std::cout << "Quel mois ? ";
    entree_securisee(mois, [](int mois) -> bool { return mois > 0 && mois <= 12; });

    int annee { 0 };
    std::cout << "Quelle année ? ";
    entree_securisee(annee, [](int annee) -> bool { return annee > 1900; });

    double taille { 0.0 };
    std::cout << "Quelle taille ? ";
    entree_securisee(taille, [](double taille) -> bool { return taille > 0.0; });

    std::cout << "Tu es né le " << jour << "/" << mois << "/" << annee << " et tu mesures " << taille << "m." << std::endl;
    return 0;
}
chris@chris:~/Bureau/Essai$ g++ essai18.cpp -o essai18C
essai18.cpp: In function ‘void entree_securisee(T&)’:
essai18.cpp:7:26: error: ‘jour’ was not declared in this scope
     while (!(std::cin >> jour))
                          ^~~~
essai18.cpp: In function ‘void entree_securisee(T&, Predicat)’:
essai18.cpp:29:26: error: ‘jour’ was not declared in this scope
     while (!(std::cin >> jour) || !predicat(variable))
                          ^~~~
chris@chris:~/Bureau/Essai$ 
Que devrai je faire pour arranger ca ?
Bonjour,

Ce n'est pas jour mais variable à utiliser dans la fonction :
    while (!(std::cin >> variable) || !predicat(variable))
Ok merci . Je suis étonné que l'auteur ai pu faire ce genre d'erreur .

Sinon un petit point qui n'est pas parfaitement clair . L'instruction :
while (!(std::cin >> variable))
Cela équivaut a dire " tant que tu ne rentres pas de variable " ou plutot " tant que tu ne rentres pas une variable de type int en l'occurence " ?
Il rentre dans la boucle while (le contenu) si une erreur survient. D'ailleurs je pense que si eof intervient tu rentres dans une boucle infinie...
Ok , mais quellle genre d'erreur peut le faire entrer dans la boucle ? (dans notre exemple)
Il entre dans le corps de la boucle dès qu'un flag est monté, comme une saisie incorrecte. Il sort de la boucle dès que tout est correct. Donc si tu rentres les bons paramètres, tu ne rentres jamais dans le corps de la boucle.

cin est bloquant, il attend une saisie.