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.