boost :: type_erasure基本示例不构建

时间:2013-08-29 07:58:19

标签: c++ boost type-erasure

我正在测试新的boost::type_erasure。不幸的是,采用基本示例的代码,因为它不构建。更具体地说,example函数basic2()给出了麻烦。我试图强调谁在创造问题,似乎这两个概念是原因

incrementable<>  // error: no match for ‘operator++’ in ‘++arg’
ostreamable<>   // error: no match for ‘operator<<’ in ‘out << arg

如果我没有错,这两个概念已经在库中实现;与int一起使用代码应该真的有效,所以我不知道如何解决这个问题。

你们中间是否有类似的问题,如果你对如何修复它有任何想法?

我正在使用gcc 4.4.7-3

我也尝试过以下示例

class CTest{
public:
CTest(const CTest& o){}
CTest(){}
};

std::ostream& operator<<(std::ostream& o,const CTest& obj){
    return o;
}

void basic2() {        
    CTest c;           
    any<
        mpl::vector<
            copy_constructible<>,
            typeid_<>,
            ostreamable<>
        >
    >  x(c);

    std::cout << c ;
}

我也有同样的错误。它实际上指的是这个代码在boost中说

 error: no match for ‘operator<<’ in ‘out << arg’

以下是失败的功能。我不明白为什么它需要已经定义的operator<<

    // from operators.hpp from boost type_erasure
    /**
     * The @ref ostreamable concept allows an @ref any to be
     * written to a @c std::ostream.
     */
    template<class Os = std::ostream, class T = _self>
    struct ostreamable
    {
        static void apply(Os& out, const T& arg) { out << arg; }
    };

0 个答案:

没有答案