Я тестирую новый boost::type_erasure
, К сожалению, взяв код базового примера, как он есть, он не собирается. Чтобы быть более конкретным это пример функция basic2()
доставляет неприятности. Я попытался подчеркнуть, кто создает проблемы, и кажется, что эти 2 концепции являются причиной
incrementable<> // error: no match for ‘operator++’ in ‘++arg’
ostreamable<> // error: no match for ‘operator<<’ in ‘out << arg
Если я не ошибаюсь, эти 2 понятия уже реализованы в библиотеке; используется с 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 ;
}
И у меня такая же ошибка. Это на самом деле указывает на этот код в надписи, говоря, что
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; }
};
Задача ещё не решена.
Других решений пока нет …