テンプレートに依存する型名のusing宣言

少し前に、テンプレートに依存する型名のusing宣言の書き方が分からなくて、色々試していた。

template <class T>
struct bar
{
  typedef T type;
};

template <class T>
class foo:bar<T>
{
  using typename bar<T>::type;		// (1) やりたかったこと
  typedef typename bar<T>::type type;	// (2) 実際に書いたコード
  void hage(type);			// (3) (1)だとこれが通らない。
};

(1)だと(3)が通らないのは、書き方が間違っているのではなく、単にコンパイラのバグなのね。
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14258