文字の range を std::string へ代入する

[お題]
std::vector の様な文字の range を std::string へ代入したい。

#include <iostream>
#include <string>
#include <vector>

#include <pstade/oven/copied.hpp>
#include <pstade/oven/concatenated.hpp>
#include <pstade/oven/filtered.hpp>

#include <boost/assign.hpp>
#include <boost/lambda/lambda.hpp>

int
main(){
    namespace oven = pstade::oven;
    namespace lambda = boost::lambda;
    using namespace boost::assign;

    std::vector<char>    array;
    array += 'H', 'T', 'T';
    
    std::string str = static_cast<const std::string&>(array|oven::copied);
    assert( str == "HTT" );

    str = "HONEY TEE PARTY!";
    str = static_cast<const std::string&>
            (str|oven::filtered(lambda::_1 != 'E')|oven::copied);
    assert( str == "HONY T PARTY!" );

    return 0;
}


pstade::oven::copied を使用すれば代入できるかと思ったのですが、std::string の代入処理が複数あり、関数が特定出来ないみたい。
しょうがないので static_cast を使用して明示的にキャストを行ってるけどスマートじゃないなぁ。


まぁでもこんなことが出来る辺り面白いな。

// 文字列の配列を全て連結する
std::string str_array[] = {
    "black ",
    "bery ",
    "pie"
};
str = static_cast<const std::string&>
        (str_array|oven::concatenated|oven::copied);
    assert( str == "black very pie" );


[pstade]
ver 1.04.3