Я могу получить код для компиляции, изменив op_t
на
using op_t = foo<void>(foo<void>::*)(void_t &&) &&;
// ^^
и sut
до
auto sut = (foo<void>{}.*op)(*[](){});
// ^
([](){}
может быть преобразовано в указатель функции, но *op
принимает ссылку на функцию, поэтому мы должны разыменовать указатель).
В качестве альтернативы, вместо изменения sut
, вы также можете изменить void_t
на
using void_t = void (*)();
// ^^^
Теперь void_t
уже является указателем на функцию, поэтому вам не нужно разыменовывать.