c++ - 为什么要在 std::initializer_list 中编译关于函数模板专业化的注释?
问题描述
我使用以下方法编写了一个printf
函数std::initializer_list
:
template<typename T, typename... Ts>
auto printf(T t, Ts... args) {
std::cout << t << std::endl;
return std::initializer_list<T>{([&] {
std::cout << args << std::endl;
}(), t)...};
}
int main() {
printf(111, 123, "alpha", 1.2);
return 0;
}
编译器对函数模板特化的实例化给出了注释:
warning: returning address of local temporary object [-Wreturn-stack-address]
return std::initializer_list<T>{([&] {
^~~~~~~
note: in instantiation of function template specialization 'printf<int, int, const char *, double>' requested here
printf(111, 123, "alpha", 1.2);
我知道返回堆栈地址是一种不好的做法,但是,如果我不返回,那么我将收到:
warning: expression result unused [-Wunused-value]
如何更改我的代码以避免这三种类型的编译器警告?
解决方案
将 initializer_list 转换为 void 以显示编译器您不是故意使用它
推荐阅读
- html - CSS中的相互影响对象
- angular - 添加与选择器具有相同值的类
- php - 为什么我的所有路线都显示 404 页面?
- c# - 单击后将 Area2D 旋转 90 度(Godot)
- java - Rabbit MQ 监听器的方面
- python - matplotlib如何为每个数据数组传递一个标签
- google-apps-script - 在谷歌表格中将宽转换为长时跳过空白值
- java - 如何使用 Java IO 将内容大小以 GB 为单位的文件作为字符串读取到内存中?
- javascript - 如何修复此 html 和 javascript 上的订单总错误?
- angular - 具有 useFactory 的提供程序 LOCALE_ID 返回 null