Inheriting constructor を使って Variadic Templates 対応版 Boost.Fusion vector

そういえば、Inheriting constructor 実装されたし簡単になりそうだよなーってことで書いてみた。

[ソース]

#include <boost/fusion/include/make_vector.hpp>
#include <boost/fusion/include/io.hpp>
#include <boost/fusion/include/at_c.hpp>
#include <iostream>


template<typename base>
struct inheriting_constructor : base {
    using base::base;
};


template<typename ...args>
struct vector : inheriting_constructor<
    decltype(boost::fusion::make_vector(std::declval<args>()...))
>{
    using inheriting_constructor<
        decltype(boost::fusion::make_vector(std::declval<args>()...))
    >::inheriting_constructor;
};


int
main(){
    vector<int, float, char> t{ 42, 3.14f, 'a' };

    std::cout << boost::fusion::at_c<1>(t) << std::endl;
    std::cout << t << std::endl;
    return 0;
}

[出力]

3.14
(42 3.14 a)

[boost]

  • ver 1.53.0

[コンパイラ]

  • g++ (GCC) 4.8.0 20121104 (experimental)