#include #include #define TEST(X) std::cout << BOOST_PP_STRINGIZE((X)) << " ---> "<< (X) < typename triqs::clef::result_of::make_expr_call,Args...>::type operator()( Args&&... args ) const { return make_expr_call (std::ref(*this),args...);} template< typename... Args> typename triqs::clef::result_of::make_expr_call,Args...>::type operator()( Args&&... args ) { return make_expr_call (std::ref(*this),args...);} template friend void triqs_clef_auto_assign (F1 & x, Fnt f) { x.v++; std::cerr<< " called triqs_clef_auto_assign "<< f(100)< v_ptr; F1b(double v_): v_ptr (new double(v_)) {v=v_;} // on purpose, I avoid adding a default constructor ! F1b (F1b const & x) { v_ptr = x.v_ptr; v = x.v; std::cerr<< " F1 COPY "< typename triqs::clef::result_of::make_expr_call::type operator()( Args&&... args ) { return triqs::clef::make_expr_call (*this,args...);} template friend void triqs_clef_auto_assign (F1b & x, Fnt f) { (*(x.v_ptr))++; std::cerr<< " called triqs_clef_auto_assign "<< f(100)< typename triqs::clef::result_of::make_expr_call,Args...>::type operator()( Args&&... args ) const { return make_expr_call (std::ref(*this),args...);} template< typename... Args> typename triqs::clef::result_of::make_expr_call,Args...>::type operator()( Args&&... args ) { return make_expr_call (std::ref(*this),args...);} template friend void triqs_clef_auto_assign (F2 const & x, Fnt f) { std::cerr<< " called F2 triqs_clef_auto_assign "<< f(10,20)< x_; triqs::clef::placeholder <2> y_; triqs::clef::placeholder <3> z_; namespace tql= triqs::clef;