我正在测试新的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; }
};