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

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(使用前将#替换为@)

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

随机推荐

  • 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