 
  
  template <typename T>
class Method {
    static T signature;
};
class GetX : public Method<std::function<int (void)>>{} GetX;
template <typename T>
std::result_of<typename T::signature> func(T const& method) {
    if (method == GetX) {
        return [](){return 1;};
    } else {
        
    }
}
 
  
   
  
   
  
   
  
  
В примере на scala, если привести к C++ сделано так, что внутри функции создаётся класс, который имеет доступ к входящим переменным (lambda) и у него определён оператор operator(), как раз в котором реализована логика возвращаемого значения с зависимости от типа входящего. Сделано это с помощью patter matching (или как-то так, это специальная конструкция scala).
Хотелось бы доиться чего-то на подобии:
И что бы вызывалось как-то так:
GetX — может быть экзхемпяром какого-то класса, от типа которого, как раз всё зависит.