Здравствуйте, Voivoid, Вы писали:
V>Но всё это дело не компилируется из-за того, что IFooBar — абстрактный класс. Как бы поправить? Единственное, что пока приходит в голову — завернуть все в boost::reference_wrapper, но получается как-то не слишком эстетично
clang этот код
компилирует.
gcc
обламывается. Такое впечатление что он где-то ссылку потерял по дороге instantiations:
/usr/local/include/boost/range/detail/any_iterator_interface.hpp:
In instantiation of ‘struct boost::range_detail::any_single_pass_iterator_interface<IFooBar, boost::any_iterator_buffer<64ul> >’:
any_iterator_interface.hpp:73:16:
required from ‘struct boost::range_detail::any_single_pass_iterator_interface<const IFooBar&, boost::any_iterator_buffer<64ul> >’
any_iterator_interface.hpp:99:16:
required from ‘struct boost::range_detail::any_forward_iterator_interface<const IFooBar&, boost::any_iterator_buffer<64ul> >’
[...]
any_iterator_interface.hpp:90:31:
error: cannot allocate an object of abstract type ‘IFooBar’
virtual Reference dereference() const = 0;