“功能类型”表示什么

时间:2015-10-08 01:21:28

标签: c++ c++11 c++14

在尝试实现std::is_function时,我遇到了VC ++和libc ++不同意的情况。

static_assert(std::is_function<int()volatile &>::value, "Not function");

libc ++接受这个。 VC ++失败,声称它不是一个函数。谁是对的?

在20.9.4.1(表47)中,它说:

template <class T> struct is_function;
T is a function type (3.9.2)

短语“功能类型”未明确指定为“整数类型”。我很难找到它的确切含义。哪些段落准确指出“功能类型”的含义?

1 个答案:

答案 0 :(得分:8)

[dcl.fct] / 1-3:

  

1在声明T D中,D的格式为

     
    

D1 parameter-declaration-clause cv-qualifier-seq opt ref-qualifier opt 例外规范 opt attribute-specifier-seq opt

  
     

以及声明T D1中包含的 declarator-id 的类型   是“ derived-declarator-type-list T”,类型   D中的declarator-id是“ derived-declarator-type-list 的函数   ( parameter-declaration-clause cv-qualifier-seq opt    ref-qualifier opt 返回T“。可选的 attribute-specifier-seq 属于函数类型。

     

2在声明T DD的格式为

     
    

D1 parameter-declaration-clause cv-qualifier-seq opt ref-qualifier opt exception-specification opt attribute-specifier-seq opt 尾返回型

  
     

并且声明T D1中包含的 declarator-id 的类型是“ derived-declarator-type-list T”, T应该是唯一的    type-specifier autoD declarator-id 的类型是“ derived-declarator-type-list 函数   ( parameter-declaration-clause cv-qualifier-seq opt    ref-qualifier opt 返回U“,其中U trailing-return-type 指定的类型。可选的    attribute-specifier-seq 属于函数类型。

     

3任何一种形式的类型都是函数类型

第3段定义术语函数类型(注意斜体)。函数类型可以包含 cv-qualifier-seq 和/或 ref-qualifier 。实际上,[dcl.fct] / 6明确地解决了这些&#34;特殊&#34;功能类型:

  

具有 cv-qualifier-seq ref-qualifier 的函数类型   (包括由 typedef-name (7.1.3,14.1)命名的类型)将出现   仅作为:

     
      
  • 非静态成员函数的函数类型
  •   
  • 指向成员的指针引用的函数类型
  •   
  • 函数typedef声明的顶级函数类型或 alias-declaration
  •   
  • type-id type-parameter (14.1)的默认参数中,或
  •   
  • type-parameter type-id type-parameter (14.3.1)。
  •   

换句话说,std::is_function<int()volatile &>::value应为true。如果MSVC另有声明,则不符合要求。