error: use of 'auto' in lambda parameter declaration only available with -std=c++1y or -std=gnu++1y [-Werror]
error: use of 'auto' in lambda parameter declaration only available with -std=c++1y or -std=gnu++1y [-Werror]
我有一个模板函数,可以将它放入输出流中而不用担心类型。这是一个 C++ 14 兼容代码,它具有 auto 作为 lambda 的参数。但是,我需要将编译器设置为 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();
}
将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();
}
我有一个模板函数,可以将它放入输出流中而不用担心类型。这是一个 C++ 14 兼容代码,它具有 auto 作为 lambda 的参数。但是,我需要将编译器设置为 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();
}
将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();
}