• [^] # Re: Y'a-t-il encore besoin de nouveaux langages "bas niveau"?

    Posté par (site web personnel, Mastodon) . En réponse à la dépêche Le langage D. Évalué à 2.

    Ce qui te semble est faux : http://www.gotw.ca/publications/mill22.htm

    Rien n'empêche le compilateur de le savoir ?

    // dude.cpp
    // c++ -o dude{,.cpp} -Wall -pedantic -std=c++0x
    #include <iostream>
    #include <stdexcept>
    #include <memory>
    struct People
    {
     virtual void joke() throw() = 0 ;
    } ;
    struct SkinHead
     : People
    {
     virtual void joke() throw() ;
    } ;
    struct Dude
     : People
    {
     virtual void joke() throw() ;
    } ;
    int main()
    {
     std::shared_ptr<People> arse { new SkinHead } ;
     arse->joke() ;
    }
    void SkinHead::joke() throw()
    {
     throw std::logic_error("Racist joke") ;
    }
    void Dude::joke() throw()
    {
     std::cout << "The usual thing\n" ;
    }
    
    

    Si les définitions des fonctions membres ne sont pas dans la même unité de compilation, le compilateur ne pourra pas deviner que People::joke ne lancera jamais d'exception.