C++11
std::tuple
のようなクラスを作成し、それを でコンパイルしようとしたときに、非常に奇妙な状況に遭遇しましたg++-4.7
。基本的に必要なのは、ラップされた型のタプルです。私はこのようなものを書きました:
#include <tuple>
template <class T>
struct Wrapper { T x; };
template <class... Types>
using Tuple = std::tuple<Wrapper<Types>...>;
template <class... Types>
struct X
{
using MyTuple = Tuple<Types...>;
};
int main( int argc, char** argv )
{
// Tuple<int,int> t; // (1)
using Y = X<int,int>;
Y y; // (2)
return 0;
}
私は次の観察を行いました:
- コードはコンパイルされません:
- を追加する
(1)
と、コンパイルされます。 - と を削除する
(1)
と(2)
、同様にコンパイルされます。
1 のエラー メッセージ:
test.cpp: In instantiation of ‘struct X<int, int>’:
test.cpp:22:4: required from here
test.cpp:10:44: error: wrong number of template arguments (2, should be 1)
test.cpp:4:8: error: provided for ‘template<class T> struct Wrapper’
質問:上記のコードは正しいと思いますが、実際にパラメーター パックを使用するのは初めてです。g++-4.7
実験的な実装であるという事実を除いて、私のコードが気に入らない理由はありますか?