template parameter packを固定長のtemplate parameter listに展開するのは、gcc 4.6では未実装である。ただ、gccのエラーメッセージが、これを正しく判定できない場合がある。
template < typename T1, typename T2 >
struct A { } ;
template < typename T, typename ... Types >
void f( T, Types ... )
{
A< T, Types ... > a ;
}
int main(int argc, char* argv[])
{
f( 0, 0 ) ;
}
この場合は正しく未実装だというコンパイルエラーになるが。
template < typename T1, typename T2 >
struct A { } ;
template < typename T, typename ... Types >
void f( Types ... )
{
A< Types ... > a ;
}
int main(int argc, char* argv[])
{
f( 0, 0 ) ;
}
この場合は、一見して訳のわからないエラーメッセージが吐き出される。
4.7では確か実装されていたはずだが、なんにせよ、今やC++コンパイラーはclangを使うべきである。gccの栄光は過去のものになった。
No comments:
Post a Comment