Hi, This can be an exercise for definining the scope of Boost.Proto for little things. I have a histogram class that internally looks like this class histogram{ ... bool operator()(double const& x){return impl.increment(x);} bool operator()(double const& x, double const& weight){return impl.accumulate(x, weight);} }; histogram h( .. bin spec .. ); double x = ... ; so to add a count to the bin of x, I call h(x); to add a count with weigh w to bin x, I call h(x,w); so far so good. Now suppose I want to "improve" the syntax. The desired syntax would be: h[x]++; h[x]+=w; I don't want to expose the internal representation of the bins, so I can't return a reference to something from h[x]. So I guess we can create a proxy of the expression h[x] , "subindex of historgram with double". The proxy can be used with the syntax to call either accumulate or increment depending on the application of += or + + to the proxy. The naive implementation is this: class histogram{ ... private: struct proxy_histogram_subscript{ histogram& self; double const& x; proxy_histogram_subscript(histogram& self, double const& x) : self(self), x(x){} proxy_histogram_subscript const& operator++() const{self.increment(x); return *this;} bool operator++(int) const{return self.increment(x);} bool operator+=(double const& weight) const{return self.accumulate(x, weight);} }; public: proxy_histogram_subscript operator[](double const& x){ return proxy_histogram_subscript(*this, x); } }; which allows the desired syntax. The question is, can Boost.Proto do better? What I don't understand is how proto can make such a mini language *inside* the class. Hopefully without adding to much lines of code. I can see that one could create a histogram terminal, but that will be public (e.g. from the main program) and that will allow to create all sorts of expression involving brackets of anything. Thank you, Alfredo