2010-03-05

gcc4.5スナップショットで遊んだ

今まで、延々と規格を睨むだけだったが、そろそろ、実際にコードを書いて、自分の規格への理解を試すべきだと思い、gcc4.5のスナップショットを使った。

その結果、C++0x Support in GCCで、サポートしていると明言されていた機能は、ほぼすべて、理解通りになっていた。動かないコードは、"sorry, unimplemented:"と表示されるか、あるいは、gccのバグだと結論できた。

ちなみに、バグであるというのは、本の虫: gcc4.5がVariadic TemplateのDependant name resolutionに対応していないを参照されたい。

実装されていない機能というのは、Variadic Tempalte argumentsを、 fixed-length argument listに渡すこと。すなわち、

template < typename T, typename ... Args >
struct Sizeof
{
    static int const value = 1 + Sizeof<Args...>::value ;
} ;

template < typename T >
struct Sizeof<T>
{
    static int const value = 1 ;
} ;

template < typename ... Args >
void f()
{
    static_assert( sizeof...(Args) == Sizeof<Args...>::value, "fail") ;
}


int main()
{
    f<int, int, int, int>() ;
}

Sizeofメタ関数は、sizeof...と同じ働きをする。

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.