loading...

re: That `overloaded` Trick: Overloading Lambdas in C++17 VIEW POST

TOP OF THREAD FULL DISCUSSION
re: I'm confused with this part: Print{ // (2) [](const char* str) { puts(str); }, [](int i) { printf("%d\n", i); } ...

It's not a non-member helper template, it's a user defined deduction guide. See this article:

arne-mertz.de/2017/06/class-templa...

It works also without deduction guide and the 'using' fix is for g++. 'operator()' cannot be ambiguous in visitors but gcc is very careful with overloading derived functions. In clang we can easily have the same results with minimal code (checked output assembler with Compiler Explorer):

template<class... Ts> struct overload : Ts... {
  overload(Ts...) = delete;
};

There is needed aggregate Initialisation + variadic templates.

code of conduct - report abuse