あなたは忘れtypedef
ました。テンプレート宣言のtypename
時点ではまだ型として知られていない型名を使用しようとしているというだけです。実際にtypedefを作成したい場合は、実際にそのキーワードを追加する必要があります。そして、以下で使用するときに、実際にタイプに名前を付けるのを忘れたと思います。
template < class T >
struct S {
typedef typename add_reference< T >::type reference;
};
...
typedef Bar< Foo > type;
S< type >::reference s = some_foo; // initialize!
参照を初期化することを忘れないでください。参照ではないことが事前にわかっている場合T
(参照間の問題を回避するため)、これを直接行うこともできます。
template < class T >
struct S {
typedef T &reference;
};
typedef Bar< Foo > type;
S< type >::reference s = some_bar_foo; // initialize!
あなたがしたいことが参照データメンバーを作成することであるならば、あなたの構文typedef
は正しくありませんでした
template < class T >
struct S {
typename add_reference< T >::type reference;
};
...
typedef Bar< Foo > type;
S< type > s = { some_bar_foo }; // initialize!
s.reference = some_other_bar_foo; // assign "some_other_bar_foo" to "some_bar_foo"
あなたが何をしたいのか正確にはわかりません。