Итак, проблема в (авто а). Как это будет выглядеть, если у тебя нет лямд? :
void FuncSecond(auto a) { std::cout << "bar " << a << std::endl; } <-- So, how parameter can be "auto"?
«auto» должно быть разрешено во время компиляции. Что будет, если вы отправите его другим методам и вызовете его с разными аргументами? Это слишком большая неопределенность. Если вы хотите создать метод, который может принимать другие параметры, чем вы можете использовать шаблоны. (Или, может быть, вы можете использовать int? =))