[英]Use cases for function type typedefs with qualifiers
即使使用 class cv 和 ref 限定符,也可以typedef
function 类型:
typedef void F() const volatile &&;
这可用于声明(但不定义)非静态成员函数:
struct A {
F f; // void f() const volatile &&
};
在模板的相关上下文中明确禁止F
的这种使用。
它也可以用作模板参数。 据我所知,没有办法提取或操作该类型的 cv 和 ref 限定符。
这种typedef
是否还有其他用例(使用任何限定符,不一定同时使用所有限定符)?
该标准在[dcl.fct]/6中指定了此类 function 类型(具有cv-qualifier-seq或ref-qualifier的函数类型)的唯一允许用例:
带有cv-qualifier-seq或ref-qualifier的 function 类型(包括由typedef-name ([dcl.typedef], [temp.param]) 命名的类型)应仅显示为:
(6.1) function 类型为非静态成员 function,
(6.2) 成员指针所指的 function 类型,
(6.3) function typedef 声明或alias-declaration的顶层 function 类型,
(6.4) type-parameter的默认参数中的type-id ,或
(6.5) 类型参数([temp.arg.type]) 的模板参数的类型ID 。
最小可重现代表性示例(mre):
using Func = void() const;
using Func2 = Func; // (6.3)
struct C {
Func f; // (6.1)
};
Func C::* ptr; // (6.2)
template <class T = Func> // (6.4)
struct S { };
S<Func> x; // (6.5)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.