当前位置: 首页 > 知识库问答 >
问题:

我该怎么办。template bar()`当同时存在模板和非模板重载时该怎么办?

洪昱
2023-03-14

一位同事与我分享了这段代码:

在gcc.godbolt.org上运行

#include <iostream>

struct A
{
    void foo() {std::cout << "1\n";}
    
    template <typename T = int>
    void foo() {std::cout << "2\n";}
};

int main()
{
    A x;
    x.template foo();
}

GCC打印1,Clang打印2,MSVC抱怨缺少模板参数。

哪个编译器是正确的?

共有2个答案

海景曜
2023-03-14

MSVC拒绝这一点是正确的:标准只是以这个为例。允许在类或别名模板的限定名称之前使用模板解析器指南,但这只是为了与不必要地要求模板参数使用它的实现兼容,现在不建议使用。

罗睿识
2023-03-14

[temp.names]/5表示前缀为template的名称必须是模板id,这意味着它必须具有模板参数列表。(也可以引用没有模板参数列表的类/别名模板,但由于@DavisHerring编写的P1787R6,当前草案中不推荐使用该模板。)

下面甚至有一个几乎与您相同的示例,将您对模板的使用标识为格式错误。

需求和示例来自CWG缺陷报告96,其中考虑了没有需求可能的歧义。

打开GCC错误报告,这里就是。我无法找到一个叮当作响的bug报告,但是搜索它并不是那么容易。但是,其缺陷报告的实施状态页面确实将缺陷报告列为未实施。

 类似资料:
  • 问题内容: 我的网站几乎完成了,除了最后一部分,我需要使图库页面支持ajax才能使用Ajax更改页码。 图库页面视图: Dajax / Dajaxice的记录不是很好…我只需要显示一些图像即可。 问题答案: 这是使用Dajax / Dajaxice的方法,这是为了在Django中简化AJAX: 根据文档安装Dajaxice和Dajax。文档似乎没有提及它,但是您也可以使用,即 pip instal

  • 问题内容: 这可能是一个简单的问题,但我很难找到答案。Redis 2.0如何处理最大分配内存不足?它如何决定要删除哪些数据或将哪些数据保留在内存中? 问题答案: 如果您打开了虚拟内存功能(我认为是2.0或2.2版中的新增功能),那么当内存用尽时,Redis将开始将“不太常用”的数据存储到磁盘上。 如果禁用Redis中的虚拟内存,则好像操作系统的虚拟内存开始用完(即交换),并且性能会大大下降。 现在

  • 问题内容: 当我尝试启动我们的Java服务器时,出现此错误:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver 但是我在脚本所在的文件夹中有mysql-connector-java-5.1.22-bin.jar,并在运行脚本时使用它: 但是仍然得到这个。该怎么办?我正在使用CentOS服务器。 问题答案: 在中的 MANIFEST.MF 文

  • 问题内容: 我正在尝试做一个欧拉计画问题,但它涉及到添加一个非常大的数字。(100!) 使用Java int和long太小。 谢谢你的建议 问题答案: BigInteger类 看起来可能是您想要的。

  • 本文向大家介绍L1不可导的时候该怎么办?相关面试题,主要包含被问及L1不可导的时候该怎么办?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 当损失函数不可导,梯度下降不再有效,可以使用坐标轴下降法,梯度下降是沿着当前点的负梯度方向进行参数更新,而坐标轴下降法是沿着坐标轴的方向,假设有m个特征个数,坐标轴下降法进参数更新的时候,先固定m-1个值,然后再求另外一个的局部最优解,从而避免损失函数

  • 问题内容: 我正在使用适用于Java的AWS开发工具包(Node.js)从DynamoDB表读取数据。自动缩放功能在大部分时间里都表现出色,并且一天中大部分时间消耗的读取容量单位(RCU)确实很低。但是,有一个编程的作业在午夜左右执行,消耗的内存约为预配置RCU的10倍,并且由于自动缩放需要花费一些时间来调整容量,因此有许多限制的读取请求。此外,我怀疑我的请求没有完成(尽管我在错误日志中找不到任何