3

我正在测试新的boost::type_erasure. 不幸的是,采用基本示例的代码,因为它没有构建。更具体地说,这个例子的功能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; }
    };
4

0 回答 0