2012-04-04

clangを使うべし

tupleのネスト

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

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.