函数默认模板参数可以放在非默认模板参数之前吗?

2024-01-11

以下代码在 gcc-4.7.1 上编译:

struct X {};

template <class T = X, typename U>
void f(const U& m) {
}


int main() {
    f<>(0);
}

然而,这个没有:

struct X {};

template <class T = X, typename U>
void f(const U& m) {
    auto g = [] () {};
}


int main() {
    f<>(0);
}

gcc-4.7.1 抱怨:

c.cpp: In function 'void f(const U&)':
c.cpp:5:15: error: no default argument for 'U'

所以我的问题是:在函数模板中将默认参数放在非默认参数之前是否正确?如果是,为什么第二个不能编译?如果不是,为什么第一个可以编译? C++11 标准如何描述此语法?


明确禁止类和别名。 n3290 § 14.1.11 规定:

如果类模板或别名模板的模板参数具有默认模板参数,则每个后续模板参数 模板参数应提供默认模板参数或者是模板参数 盒

对于函数,唯一的限制似乎与参数包有关:

函数模板的模板参数包不得 后跟另一个模板参数,除非该模板参数可以推导或具有默认值 争论

但显然这与本案无关。

鉴于第 14 条中没有任何内容禁止它的功能,我们似乎必须假设它是允许的。

A 工作组报告的说明 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226似乎证实了这就是意图。该节最初提议的措辞是:

如果类模板的模板参数具有默认模板参数,则所有后续模板参数都应提供默认模板参数。 [笔记:这不是函数模板的要求,因为可能会推导出模板参数(14.8.2 [温度扣除]).]

但我看不出最终版本中该注释的去向。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数默认模板参数可以放在非默认模板参数之前吗? 的相关文章

  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 按成员序列化

    我已经实现了template
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 重载<<的返回值

    include
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • Pytorch:交叉熵损失中的权重

    我试图通过一个实际的例子来理解 CrossEntropyLoss 中的权重是如何工作的 所以我首先运行标准 PyTorch 代码 然后手动运行 但损失并不相同 from torch import nn import torch softma
  • Keras:网络不使用 fit_generator() 进行训练

    我在大型数据集上使用 Keras 使用 MagnaTagATune 数据集进行音乐自动标记 所以我尝试将 fit generator 函数与自定义数据生成器一起使用 但损失函数和指标的值在训练过程中不会改变 看起来我的网络根本没有训练 当我
  • 如何在 Ubuntu 上修复 Nokogiri?

    我在我的工作站上运行 Ubuntu 13 04 并使用 ruby 2 0 0 它是通过 RVM 安装的 aptitude 显示 libxml2 Package libxml2 State installed Automatically in
  • java扩展类有两种类型

    在java中我有以下内容 ClassA obj new ClassB where ClassB extends ClassA 是类型的对象ClassA or ClassB或两者 如果我们有 ClassB obj new ClassB 看来很
  • Grails3文件上传maxFileSize限制

    我正在尝试更新 Grails 3 中的文件上传 maxFileSize 限制 并尝试了以下配置src main resources application properties application groovy and applicat
  • Chisel 中的矩阵运算

    Chisel是否支持加法 乘法 转置等矩阵运算 如果没有 实施它们的最佳方法是什么 向量怎么样 Chisel 不支持矩阵运算 它是一种用于编写实现此类操作的硬件生成器的 DSL 有关专用数学硬件生成器的示例 请参阅 Hwacha 硬件矢量单
  • 列出用户在过去几天签入 TFS 的所有文件

    我们有很多项目 每个项目都有几个文件 可以从主解决方案根 项目级别和个人级别签入文件 有没有办法找到特定用户在过去几天签入的所有级别的所有文件 如果安装了 TFS 电动工具 则可以在 Visual Studio 命令提示符下使用命令 tfp
  • 断言接口的类型

    在一般情况下 我无法优雅地将图像的像素作为数组获取 f err os Open imgPath check err defer f Close img err image Decode bufio NewReader f check err
  • 如何使用意图共享来共享 gif 图像到可用的应用程序?

    我想与 Whatsapp 等可用应用程序共享 gif 但无法获取我的可绘制资源中存在的 gif 的有效 Uri Uri path Uri parse android resource my package name R drawable g
  • 在Keras“ImageDataGenerator”中,“validation_split”参数是一种K折交叉验证吗?

    我正在尝试对 Keras 模型进行 K 折交叉验证 使用 ImageDataGenerator 和 flow from directory 用于训练和验证数据 我想知道 ImageDataGenerator 中的参数 validation
  • VSTO问题-无法创建Visual Studio Excel工作簿项目

    当我尝试在 Visual Studio 2008 中创建 Excel 2007 工作簿项目时 收到以下错误消息 无法创建项目 因为 Excel Visual Studio 设计时适配器加载项 无法正常工作 Excel 可能已禁用该加载项或使
  • 存在类型和重复参数

    Scala 中重复参数的类型是否可能具有存在类型范围 动机 In 这个答案 https stackoverflow com a 11517724 334519我使用以下案例类 case class Rect2D A N lt Nat row
  • 选择每月记录表格数据库

    mysql gt SELECT FROM con transactions t id p id date amount 10 1 2016 02 17 19 24 05 1800 12 2 2016 02 18 11 40 13 200 1
  • Java/JSF i18n 长文本(术语、常见问题解答)

    在大多数情况下 我只是在页面的某个地方组合了很多短文本字符串 但在某些情况下 我只有一个包含长静态文本的页面 例如术语或常见问题解答 现在 只需将该段落也放入资源包中 或者构建一个到 terms en xhtml 的切换 依此类推 在 JS
  • sed 无法在 bash 脚本中工作

    我已经搜索了几个小时来寻找这个问题的答案 这似乎简单得令人沮丧 我有一个 bash 脚本 我对其进行了简化 以找到阻止其工作的行 并留下 bin bash sed i e s n g usb lenny rss tmp rss tmp 如果
  • 在 Play Framework 视图模板中包含纯 HTML 页面

    有没有办法在 Play 框架的视图模板中包含纯 html 页面 我有一个场景 其中有一个通用视图模板 并且在模板正文中 我想包含某些静态 html 页面 我知道我可以在某个模板中包含其他模板 但我不确定是否可以包含纯 html 页面 一种选
  • 当网格地图中有多个目标时,如何设计A*的启发式?

    我面临一个问题 我必须使用 A 来搜索地图 并且该地图中有多个目标需要达到 我的目标是扩展地图中的最少节点 关于如何设计这个 A 算法的启发式有什么想法吗 谢谢 假设 多个目标 是指您想要实现的目标any one 只需取所有启发式中的最小值
  • 需要discordjs时出错:“找不到模块'node:events'”[重复]

    这个问题在这里已经有答案了 我正在尝试开发一个机器人来表达不同意见 我安装了npm install discord js save图书馆 但是导入的时候却报错 我该如何修复它 命令 node internal modules cjs loa
  • 将鼠标悬停即可开始播放简单的幻灯片

    我正在寻找仅当用户将鼠标悬停在图像上时播放图像幻灯片的最佳方法 当用户将鼠标移到图像之外时幻灯片再次停止 下面的演示完成了我需要的一切 除了悬停功能 Link to demo http snook ca technical fade fad
  • 函数默认模板参数可以放在非默认模板参数之前吗?

    以下代码在 gcc 4 7 1 上编译 struct X template