如果两者都可行,编译器如何确定使用SFINAE的函数和标准函数之间的关系?

用户名

考虑以下代码:

#include <iostream>
#include <type_traits>

template <typename T>
class A
{
public:
    // Allow func to be called if T is the const version of T2
    // e.g., T is 'int const' and T2 is 'int'
    template <typename T2,
              typename = typename std::enable_if<
                                          std::is_same<T, T2 const>::value>::type>
    void func(A<T2> const &)
    {
        std::cout << "Conversion" << std::endl;
    }

    // Allow func to be called for same version of T
    void func(A const &)
    {
        std::cout << "No conversion" << std::endl;
    }
};

int main()
{
    A<int const> a;

    a.func(A<int const>{});

    return 0;
}

此代码在使用GCC-8.3编译时会编译并产生输出No conversion-它选择了func不使用的版本std::enable_if但是,如果我注释掉的第二个版本func,它将仍然编译并产生输出Conversion换句话说,这两个版本funcA是执行这种方法可用。鉴于两个重载都是可行的,编译器用来选择func(A const &)其他版本(func(A<T2> const &))的具体规则是什么

内森·奥利弗

规则是,如果非功能模板和功能模板专业化具有相同的签名,则将选择非功能模板而不是模板专业化。可以在[over.match.best] / 2中找到

给定这些定义,如果对于所有自变量i,ICSi(F1)的转换顺序都不比ICSi(F2)差,则将一个可行函数F1定义为比另一个可行函数F2更好的函数,然后

[...]

  • F1不是功能模板专业化,而F2是功能模板专业化[...]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

编译器如何确定使用哪个函数?

来自分类Dev

Kodi和Kodi-standalone之间有何区别?两者都可以通过w / oa窗口管理器启动

来自分类Dev

从终端启动和使用popen之间的OpenOffice行为差异-两者都在chroot中

来自分类Dev

如果两者都被谴责

来自分类Dev

编译器如何确定要调用的函数模板?

来自分类Dev

如何在不使用标准C库的情况下使用编译器内置函数

来自分类Dev

编译器在移动和复制构造函数之间的选择

来自分类Dev

这个函数是线性的,二次的,还是两者都不是?(C#)

来自分类Dev

sql-使用它归一化用户表,但两者都可以登录

来自分类Dev

如何在函数之间传递已编辑的WAV而不在两者之间保存WAV?

来自分类Dev

如何让django在星期几输出?两者都在视图和模板中

来自分类Dev

如何连接Qtoolbutton和QStackedWidget(两者都在同一框架中)

来自分类Dev

如何让django在星期几输出?两者都在视图和模板中

来自分类Dev

使用&和Intptr的指针声明语法。两者都一样吗?

来自分类Dev

Gson转换问题使用键和值时,两者都是用户定义的对象

来自分类Dev

比较两个具有通用文件名的文件,但如果匹配则希望两者都输出,如何使用awk?

来自分类Dev

可能的编译器错误:两台计算机之间使用Intel编译器的boost bessel函数会产生奇怪的结果吗?

来自分类Dev

我如何选择状态 = 0 的位置,而不是两者都使用 laravel

来自分类Dev

两者都实现了类。将使用两者之一

来自分类Dev

videojs-youtube,如果两者都设置,则开始和结束参数不起作用

来自分类Dev

如何让编译器处理这个函数?

来自分类Dev

Visual Studio:如果两者都打开相似的解决方案,如何区分实例?

来自分类Dev

使用编译器内置函数而不链接c标准库

来自分类Dev

当两者都安装在一台服务器上时,如何通过PHP使用Tika?

来自分类Dev

将类模板转换为 SFINAE 和构造函数委托,现在我收到编译器错误

来自分类Dev

两者都在 URL 中返回“moreEdu”,如何以单一形式使用两个按钮?

来自分类Dev

编译器:如何解析函数调用和函数定义

来自分类Dev

编译器:如何解析函数调用和函数定义

来自分类Dev

编译器与解释器之间的关系

Related 相关文章

  1. 1

    编译器如何确定使用哪个函数?

  2. 2

    Kodi和Kodi-standalone之间有何区别?两者都可以通过w / oa窗口管理器启动

  3. 3

    从终端启动和使用popen之间的OpenOffice行为差异-两者都在chroot中

  4. 4

    如果两者都被谴责

  5. 5

    编译器如何确定要调用的函数模板?

  6. 6

    如何在不使用标准C库的情况下使用编译器内置函数

  7. 7

    编译器在移动和复制构造函数之间的选择

  8. 8

    这个函数是线性的,二次的,还是两者都不是?(C#)

  9. 9

    sql-使用它归一化用户表,但两者都可以登录

  10. 10

    如何在函数之间传递已编辑的WAV而不在两者之间保存WAV?

  11. 11

    如何让django在星期几输出?两者都在视图和模板中

  12. 12

    如何连接Qtoolbutton和QStackedWidget(两者都在同一框架中)

  13. 13

    如何让django在星期几输出?两者都在视图和模板中

  14. 14

    使用&和Intptr的指针声明语法。两者都一样吗?

  15. 15

    Gson转换问题使用键和值时,两者都是用户定义的对象

  16. 16

    比较两个具有通用文件名的文件,但如果匹配则希望两者都输出,如何使用awk?

  17. 17

    可能的编译器错误:两台计算机之间使用Intel编译器的boost bessel函数会产生奇怪的结果吗?

  18. 18

    我如何选择状态 = 0 的位置,而不是两者都使用 laravel

  19. 19

    两者都实现了类。将使用两者之一

  20. 20

    videojs-youtube,如果两者都设置,则开始和结束参数不起作用

  21. 21

    如何让编译器处理这个函数?

  22. 22

    Visual Studio:如果两者都打开相似的解决方案,如何区分实例?

  23. 23

    使用编译器内置函数而不链接c标准库

  24. 24

    当两者都安装在一台服务器上时,如何通过PHP使用Tika?

  25. 25

    将类模板转换为 SFINAE 和构造函数委托,现在我收到编译器错误

  26. 26

    两者都在 URL 中返回“moreEdu”,如何以单一形式使用两个按钮?

  27. 27

    编译器:如何解析函数调用和函数定义

  28. 28

    编译器:如何解析函数调用和函数定义

  29. 29

    编译器与解释器之间的关系

热门标签

归档