[英]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.