ошибка: использование 'auto' в объявлении лямбда-параметра доступно только с -std = c ++ 1y или -std = gnu ++ 1y [-Werror] - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть функция шаблона, которая принимает и помещает ее в поток вывода, не заботясь о типе. Это код, совместимый с C ++ 14, который имеет auto в качестве параметров лямбды. Но мне нужно, чтобы настройки моего компилятора были C ++ 11. Какие изменения я внесу, чтобы решить эту проблему, чтобы она работала и с C ++ 11.

Вот мой код

template<class... Args >
std::string build_message( Args&&... args )
{

    auto aPrintImplFn = [](auto& os, auto&& ... ts) {
        // expression (void) just to suppress the unused variable warning
        (void)std::initializer_list<char> { (os << ts, '0')... };
    };

    std::ostringstream out;
    aPrintImplFn(out, std::forward<Args>(args)...);
    return out.str();
}

1 Ответ

1 голос
/ 02 апреля 2020

изменить auto на явный тип, как показано ниже

#include <sstream>
#include <string>
#include <iostream>
template<class... Args >
std::string build_message( Args&&... args )
{

    auto aPrintImplFn = [](std::ostringstream & os, Args&& ... ts) {
        // expression (void) just to suppress the unused variable warning
        (void)std::initializer_list<char> { (os << ts, '0')... };
    };

    std::ostringstream out;
    aPrintImplFn(out, std::forward<Args>(args)...);
    return out.str();
}
...