Как насчет следующего?
std::invoke_result<decltype(&T::operator[]), T, size_type>
Но этот синтаксис должен работать с одним, а не с шаблоном, operator[]
.
В случае шаблона или перегрузки следует избегатьstd::invoke_result
и следует по пути decltype()
, предложенному TC
Или, может быть, вы можете заключить вызов в лямбда-функцию и применить std::invoke_result
к лямбде (если вы действительно, действительно хотите использовать std::invoke_result
).
Что касается синтаксиса std::invoke_result
, учтите, что указатель на функцию-член - это совершенно разные вещи по сравнению с указателем на обычную функцию.В любом случае, вы можете грубо видеть его как указатель на обычную функцию, получающую дополнительный аргумент (в первой позиции), соответствующий объекту, который вызывает его метод.
Итак, в вашем примере первый аргумент T
представляют объект типа T
, вызывающий его оператор.