あー

2週間くらいあいたな。
C++メモ。こないだ聞かれたので。

template<typename T> class X;
X<A> x;
X<const A>& x2 = x;

がだめな理由。

template<typename T> class X {
public:
  void f(T& val) { /* 何かvalを書き換える */ }
  /* (ry */
};
X<A> x;
X<const A>& x2 = x;

const A a;
x2.f(a);  // <- aが書き換わる

が通っちゃうから、じゃね?