class Encapsulator
{
  protected:
    int i;
  public:
    Encapsulator(int v) : i(v) {}
};

Encapsulator f(int x) { return x + 2; }

#include <iostream>
int main( void )
{
    Encapsulator e = f(7);
    // forbidden: std::cout << e.i << std::endl;
    struct Gimme : Encapsulator { static int read(Encapsulator& o) { return o.i; } };
    std::cout << Gimme::read(e) << std::endl;
}
