Как заменить кусок кода со стандарта c++20 на стандарт c++17

Есть вспомогательный класс

template<class... Ts>
struct MakeVisitor : Ts... {
    using Ts::operator()...;
};

// Такой конструкции нет в c++17
template<class... Ts>
MakeVisitor(Ts...) -> MakeVisitor<Ts...>;

Который прекрасно работает в c++20,

int main(){
  auto l1 = ;
  auto l2 = ;
  
  // так

  MakeVisitor visitor([](int v){std::cout << "int " << v;}, 
                      [](char v){std::cout << "char " << v;});

  std::invoke(visitor, 1);
  std::invoke(visitor, '1');

  // или так

  using visitor_type = MakeVisitor<decltype([](int v){std::cout << "int " << v;}), 
                                   decltype([](char v){std::cout << "char " << v;})>

  std::invoke(visitor_type{}, 1);
  std::invoke(visitor_type{}, '1');
}

но я не знаю, как заставить его работать в c++17.


Ответы (1 шт):

Автор решения: HolyBlackCat

MakeVisitor visitor(...); -> MakeVisitor visitor{...};. Все остальное должно работать и так.

Такой конструкции нет в c++17

Есть она там.

→ Ссылка