将函数模板原型作为参数传递

nnolte

我正在尝试将模板化的函数传递给另一个函数,如下所示:

template<typename T = bool>
void fun() {}

template<typename F>
void higher_order_fun( const F & f) {
    f();
}

int main () {
    //higher_order_fun(fun<>); //works
    higher_order_fun(fun);
}

gcc10.2我能够通过fun(模板原型)以同样的方式指定类型fun<>
请注意,如果我没有默认的模板参数T = bool,这将不起作用。

Clang11这不起作用。
参见https://godbolt.org/z/9WfMdc

这里发生了什么?

dfrib

以下所有标准参考文献均引用N4659:2017年3月Kona工作草案/ C ++ 17 DIS


可以说这是一个GCC错误(/扩展功能),尽管我找不到它的票证。

根据[temp.names] / 1,您可以通过template-id引用模板专业化后者的语法不允许省略尖括号,即使其中的template-argument-list可能为空(opt):<>

模板专业化可以通过template-id来引用

simple-template-id:
  template-name < template-argument-list_opt >

template-id:
  simple-template-id
  operator-function-id < template-argument-list_opt >
  literal-operator-id < template-argument-list_opt >

在您的情况下,您要引用fun<bool>函数模板的专业化fun,这与您可以通过将默认模板参数用于的单一类型模板参数引用的专业化相同fun,即as fun<>但是,不能fun<bool>仅通过指定fun;来参考专业化后者不涉及专业化,因此您的程序格式错误。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将函数模板原型作为参数传递

来自分类Dev

如何将向量元素作为可变参数模板函数的参数传递?

来自分类Dev

将成员函数作为参数传递给函数模板

来自分类Dev

将模板原型作为模板参数传递-是否可以?

来自分类Dev

将函数模板传递给具有任意参数列表的函数模板

来自分类Dev

为每个可变参数模板参数调用函数,并将结果作为构造函数参数传递

来自分类Dev

如何传递可变参数模板函数?

来自分类Dev

将模板函数作为普通函数的参数传递

来自分类Dev

将模板函数和重载作为函数参数传递

来自分类Dev

将静态成员函数作为模板参数传递

来自分类Dev

将函数作为参数传递给模板返回值

来自分类Dev

如何将函数指针作为类模板参数传递?

来自分类Dev

如何将谓词函数作为模板参数传递?

来自分类Dev

将函数作为类型未知的类的模板参数传递

来自分类Dev

将静态成员函数作为模板参数传递

来自分类Dev

将继承的模板结构作为函数参数传递

来自分类Dev

将函数指针作为非类型模板参数传递

来自分类Dev

如何将模板作为参数传递给函数

来自分类Dev

将可变参数模板参数传递给可变函数

来自分类Dev

将成员函数传递给可变参数模板函数

来自分类Dev

如何将函数作为模板参数传递,其中函数返回与模板参数相同?

来自分类Dev

Lambda作为成员函数模板的默认参数

来自分类Dev

C ++结构函子作为函数模板参数

来自分类Dev

使用原始指针作为参数的函数模板推导

来自分类Dev

如何使可变参数模板类方法以函数指针作为从函数模板派生的类型作为参数?

来自分类Dev

以可变参数类模板作为函数调用参数的函数模板参数推导

来自分类Dev

将模板函数指针作为模板参数传递给模板太冗长

来自分类Dev

将模板类作为类成员函数内的模板模板参数传递

来自分类Dev

将函数作为参数传递

Related 相关文章

  1. 1

    将函数模板原型作为参数传递

  2. 2

    如何将向量元素作为可变参数模板函数的参数传递?

  3. 3

    将成员函数作为参数传递给函数模板

  4. 4

    将模板原型作为模板参数传递-是否可以?

  5. 5

    将函数模板传递给具有任意参数列表的函数模板

  6. 6

    为每个可变参数模板参数调用函数,并将结果作为构造函数参数传递

  7. 7

    如何传递可变参数模板函数?

  8. 8

    将模板函数作为普通函数的参数传递

  9. 9

    将模板函数和重载作为函数参数传递

  10. 10

    将静态成员函数作为模板参数传递

  11. 11

    将函数作为参数传递给模板返回值

  12. 12

    如何将函数指针作为类模板参数传递?

  13. 13

    如何将谓词函数作为模板参数传递?

  14. 14

    将函数作为类型未知的类的模板参数传递

  15. 15

    将静态成员函数作为模板参数传递

  16. 16

    将继承的模板结构作为函数参数传递

  17. 17

    将函数指针作为非类型模板参数传递

  18. 18

    如何将模板作为参数传递给函数

  19. 19

    将可变参数模板参数传递给可变函数

  20. 20

    将成员函数传递给可变参数模板函数

  21. 21

    如何将函数作为模板参数传递,其中函数返回与模板参数相同?

  22. 22

    Lambda作为成员函数模板的默认参数

  23. 23

    C ++结构函子作为函数模板参数

  24. 24

    使用原始指针作为参数的函数模板推导

  25. 25

    如何使可变参数模板类方法以函数指针作为从函数模板派生的类型作为参数?

  26. 26

    以可变参数类模板作为函数调用参数的函数模板参数推导

  27. 27

    将模板函数指针作为模板参数传递给模板太冗长

  28. 28

    将模板类作为类成员函数内的模板模板参数传递

  29. 29

    将函数作为参数传递

热门标签

归档