Bonjour.

Je débute les tutos avec boost::proto et j'avais une question très simple.
J'ai modifié un peu le helloworld du tout premier exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <boost/proto/proto.hpp>
#include <boost/typeof/std/ostream.hpp>
using namespace boost;
 
proto::terminal< std::ostream & >::type cout_ = { std::cout };
 
template< class Expr >
void evaluate( Expr const & expr )
{
    proto::default_context ctx;
    proto::eval(expr, ctx);
}
 
int main()
{
    evaluate( cout_ << "hello" << ',' << " world"<<"\n");
    int a;
    std::cout<<"type a = ";
    std::cin>>a;
    evaluate( cout_ << "hello" << ',' << " world"<< "and" <<" a = " << a <<"\n");
    return 0;
}
Le programme se déroule comme un programme "normal", sans accroche. Cependant, j'ai un peu de mal à comprendre ce qui est fait à la compilation et ce qui est fait à l'exécution (l'avantage de boost::proto, si j'ai bien suivi c'est justement de pouvoir faire entre autres du précalcul à la compilation).

Est-ce que le main compilé est équivalent à celui là ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
int main()
{
    std::cout<< "hello, world\n";
    int a;
    std::cout<<"type a = ";
    std::cin>>a;
    std::cout<< "hello, world and a = "<<a<<"\n";
    return 0;
}
C'est à dire est-ce que boost::proto a concaténé autant que faire se peut les chevrons des cout (même si le compilo l'aurait peut être fait de lui-même) ?

Merci.