|
|
1
5
简短回答: 代码正常,MSVC发出虚假警告。 MSVC和G++在非类型模板参数匹配中都有错误,但它们确实为您的特定示例选择了正确的错误。 长答案: 可以使用带有非类型模板参数的重载函数模板。 但是,匹配 模板参数 到模板声明的工作方式与预期的不一样(无论如何,由我)。所有匹配的模板都输入到重载分辨率中。在任何阶段,它都不喜欢“精确匹配”。 根据C++ 17 [ TEMP.ARG.NOTYPE/] 2, converted constant expressions 是允许的。这意味着,例如:
请注意,转换后的常量表达式不能包含收缩转换,并且
如果我们有以下设置:
那么正确的行为是:
MSVC 2017和G++7,8都错误地允许
MSVC在生成无效匹配时发出警告;G++根本不提供任何诊断。如果我们移除
在代码中有一个非常量lvalue引用参数:
这会有所不同,因为重载分辨率可以基于函数参数进行选择。电话:
然后两个重载
如上所述,呼叫
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |