Как заменить кусок кода со стандарта 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
Есть она там.