今日、using
キーワード inを使用して問題が発生しましたC++11
。ここで別のアプローチを使用することにしました (以下の例にコメントとして追加されています)。X
を mixinのマトリックスと考えることができ、目的はinY
の転置されたマトリックス型にアクセスすることです。にing する代わりに、より強力な別のアプローチを採用し、2 つのテンプレート パラメーター自体を受け取るエイリアスを定義します。X
Y
typedef
X<B,A>
X<A,B>
Sibling
template <class A, class B>
struct X
{
using Left = A;
using Right = B;
template <class T1, class T2>
using Sibling = X<T1, T2>;
// using Reversed = X<B, A>; // What I really want and use now. :-)
};
template <class A>
struct Y
{
using Left = typename A::Left;
using Right = typename A::Right;
using AReverse = typename A::Sibling<Right, Left>; // Gives a compiler error
// using AReverse2 = typename A::Reversed; // Works, of course.
};
using Z = X<int,double>::Sibling<double,int>; // Works
上記のコードをコンパイルしてみましたがg++-4.7 -std=c++11 -c
、次のエラー メッセージが表示されます。
t.cpp:16:9: error: expected nested-name-specifier before ‘AReverse’
t.cpp:16:9: error: using-declaration for non-member at class scope
t.cpp:16:18: error: expected ‘;’ before ‘=’ token
t.cpp:16:18: error: expected unqualified-id before ‘=’ token
なぜエラー メッセージが表示されるのか、またはどのように修正できるのかがまったくわかりません。誰かが私に問題が何であるかを説明できますか?
どうもありがとう!