依存する基本クラスから型名をインポートするためにusing-declarationsが機能しないように見える理由を誰かが知っていますか?これらはメンバー変数と関数に対して機能しますが、少なくともGCC 4.3では、型に対して無視されているようです。
template <class T>
struct Base
{
typedef T value_type;
};
template <class T>
struct Derived : Base<T>
{
// Version 1: error on conforming compilers
value_type get();
// Version 2: OK, but unwieldy for repeated references
typename Base<T>::value_type get();
// Version 3: OK, but unwieldy for many types or deep inheritance
typedef typename Base<T>::value_type value_type;
value_type get();
// Version 4: why doesn't this work?
using typename Base<T>::value_type;
value_type get(); // GCC: `value_type' is not a type
};
いくつかのレベルの継承を通じて継承したいアロケータスタイルのtypedefのセットを持つ基本クラスがあります。私がこれまでに見つけた最善の解決策は上記のバージョン3ですが、なぜバージョン4が機能しないように見えるのか興味があります。GCCはusing-declarationを受け入れますが、それを無視しているようです。
C ++ Standard、C++Progを確認しました。ラング。第3版 [Stroustrup]、およびC ++テンプレート[Vandevoorde、Josuttis]ですが、using-declarationsを依存する基本クラスタイプに適用できるかどうかについては言及されていないようです。
別の例を見るのに役立つ場合は、GCCメーリングリストで質問されているが実際には回答されていない同じ質問があります。質問者は、他の場所で「typenameの使用」を見たことがあるが、GCCはそれをサポートしていないようだと示しています。私はそれをテストするために利用できる別の適合コンパイラを持っていません。