4
これはgccのバグか、パラメータパックの使い方が間違っていますか?C++バリデーションテンプレート、間違ったパラメータパックの長さ?
は(gccでコンパイル4.6.3 :)
#include <iostream>
template<class...Ts> struct tuple{};
template<class...>class test;
template< template <class...> class tp,
class...arg1Ts,
class...arg2Ts>
class test<tp<arg1Ts...>,tp<arg2Ts...>>{
public:
void test1(arg1Ts... arg1s,arg2Ts... arg2s){
std::cout<<sizeof...(arg1s); //Why is this 2? Why not 0?
std::cout<<sizeof...(arg2s); //2 ok
}
};
int main(){
test<tuple<>,tuple<char,int>> t1; //(arg1Ts... = empty), (arg2Ts... = char,int)
t1.test1('a',2); //prints 22, not 02
}
gccの現在のバージョンで試してみましたか? btw。ここでコンパイル可能な例を提供した場合は役に立ちます。 – PlasmaHH
'griwes @ Griwes-Linux:〜/ tests $ g ++ - 4.7 2.cpp -o t2 -std = C++ 11; griwes @ Griwes-Linux:〜/ tests $ ./t2; 02' - g ++ 4.7で動作します。私もg ++ 4.6を使ってテストし、あなたが書いたように '22'を印刷しました。新しいバージョンで修正されたバグと思われる。 – Griwes
@PlasmaHHコンパイルするようにコードを修正しました。 – dunedain