うまく説明できないので, 簡略化したソースをのせます.
class A {
 class B {
  int *ptr;
 public:
  B(int *p) : ptr(p) {}
  int& bar() { return ptr[1]; }
  int bar() const { return ptr[1]; }
 } ;
 int x[3];
public:
 A() { x[0] = 7; x[1] = 8; x[2] = 9; }
 B foo() { return B(x); }
 B foo() const { return B(x); }
} ;

void hoge(const int v) { printf("%d\n", v); }
void fuga(const A& a) { hoge(a.foo().bar()); }

int main() {
 A a;
 fuga(a);
 return 0;
}
このソースを g++ 2.95.2 でコンパイルすると
>test2.cc:15: passing `const int *' as argument 1 of `A::B::B(int *)'
>discards qualifiers
とエラーが出ます. この場合どういう風にコードを書きなおすのが,
いいのでしょうか ? ちなみに, class B のコンストラクタ, メンバ ptr の
const 版を追加したバージョンも試したのですが, bar() だけ const じゃない
ものが呼び出されてしうので, うまくいきませんでした.
そういうものなのでしょうか ?