Сбой при вызове компонента Iostreams () - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь получить доступ к базовому std::ifstream, добавленному в boost::iostreams::filtering_streambuf цепочку.Согласно FAQ , один из способов сделать это - использовать component/component_type.Почему код ниже не работает?

std::ifstream fp{"input.txt", std::ios_base::in | std::ios_base::binary};
boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
in.push(boost::iostreams::counter{});
in.push(fp);
auto *c = in.component<boost::iostreams::counter>(0); // works
std::cout << (c == nullptr) << std::endl; // 0
std::cout << c->characters() << std::endl;
std::cout << c->lines() << std::endl;

// Look into ifstream
auto *f_ptr = in.component<std::ifstream>(1); // fails
std::cout << (f_ptr == nullptr) << std::endl; // 1

Запуск на Coliru

...