Я определяю псевдоним шаблона функции:
template <typename T>
using Cb = typename std::add_pointer<void(bool, T)>::type;
, но получил эту ошибку:
ошибка: невозможно преобразовать 'Log :: operator () (Read &) [с T = int] :: 'to' Cb '{aka' void (*) (bool, int) '} в назначении
template <typename T>
class Log : public Sink<T> {
public:
void
operator()(Read<T> &read) {
if (!more_) {
// error !!!
more_ = std::function<Cb<T>>([&](bool done, T val) {
if (!done) {
cout << val << endl;
this->operator()(read);
}
});
}
read(false, more_);
}
private:
Cb<T> more_ = nullptr;
};
основная функция:
int main() {
Log<int> logInt;
return 0;
}
кому разрешить эту синтаксическую ошибку?
пример кода