Попробуйте с
using f = typename std::result_of<decltype(&foo<&bar::a>::q)(bar&)>::type;
using q= typename std::result_of<decltype(&qoo<&bar::a>)(bar&)>::type;
Как лучше объяснено Т.С., type
в std::result_of
- это тип, возвращаемый из типа вызываемого при вызове с некоторыми типами аргументов.
Если вы напишите
std::result_of<decltype(foo<&bar::a>::q)>
вы передаете std::result_of
только тип вызываемого (почти: вам также нужен &
перед foo
); Вы также должны передать тип аргументов (в данном случае только один аргумент: bar
ссылка), поэтому
std::result_of<decltype(&foo<&bar::a>::q)(bar&)>