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