boost::fusion::at と boost::fusion::at_c の違い

#include <assert.h>

#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/include/at.hpp>


int
main(){
    namespace fusion = boost::fusion;
    namespace mpl = boost::mpl;

    fusion::vector<float, float, float> v;

    // at() は、mpl::int_ で渡して、at_c() は、数値を直接渡す
    assert( fusion::at<mpl::int_<0> >(v) == fusion::at_c<0>(v) );

    return 0;
}


boost::fusion::at は、boost::mpl::int_ のメタクラスを渡すのに対して、boost::fusion::at_c は、直接数値を template に渡す。
実行時に変数を渡して、値を取得できないのかな?と、思ったけど戻り値がバラバラだから無理か。
そもそも、そういう風に使うライブラリじゃないですね。
余談ですが、at_c の'c'ってどういう意味なんだろう?C言語のC?


[追記]
at_c の"c"は、"constant"の"c"らしいです。
C++ Template Metaprogramming】は読んでみたいんですが、日本語版が…。
まぁ英語の勉強だと思って頑張って読んでみるともありかな。
和訳版があるみたいです。
本屋で見かけた事がある気がするけど、和訳版だとは全然思わなかった。
今度、立ち読みしてみよう。
どっちにしても買うお金が無いけどね。
コメントありがとうございます。


[boost]
ver 1.44.0