template<typename T> struct C1 {
  void operator = (T) { }
};

template<typename T> struct C2: public C1<const T *>{
  // wow!
  // void operator = (const T * a) {
  //   C1<const T *>::operator = (a);
  // }
};

int main(int ac, const char *av[]) {
  C2<char> c;
  c = "foo"; // <-!!??
  return 0;
}

C2::operator = () を定義してやらないと "!!??" の部分で
コンパイルエラーになるのが悔しくて悔しくてアタシ夜も眠れません。
エラーメッセージはこんな感じ ( g++ 3.2 )

> no match for `C2<char>& = const char[4]' operator

g++ も VC++ も同様なのでコンパイラのバグじゃないと思うんだけど
これはれっきとした仕様でしょうか?