是否可以为constexpr函数定义类型别名

Min*_*ine 8 c++ constexpr c++11 type-alias

在C++ 11或C++ 14中,我试图为constexpr函数定义一个类型别名.

我试过了:

#include <iostream>
constexpr int foo(int i, int j) { return i + j; }
using TConstExprFunction  = constexpr int (*)(int i, int j);

int main() {
  TConstExprFunction f = foo;
  constexpr int i = f(1, 2);
  std::cout << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但它无法用g ++和clang ++编译.

克++: error: expected type-specifier before 'constexpr'

铛++: error: type name does not allow constexpr specifier to be specified

我必须按照以下方式进行编译

#include <iostream>
constexpr int foo(int i, int j) { return i + j; }
using TConstExprFunction  = int (*)(int i, int j);

int main() {
  constexpr TConstExprFunction f = foo;
  constexpr int i = f(1, 2);
  std::cout << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

从clang ++的错误消息来看,我似乎无法使用constexpr类型名称.

那么,是否可以为constexpr函数定义一个类型别名; 如果有,怎么样?

101*_*010 8

根据C++标准7.1.5/p8 constexpr说明符[dcl.constexpr](Emphasis Mine):

constexpr说明符对一个类型没有影响constexpr 功能constexpr构造.

同样来自7个声明[dcl.dcl]:

alias-declaration:
using identifier attribute-specifier-seqopt = defining-type-id ;
Run Code Online (Sandbox Code Playgroud)

constexpr说明符不是函数类型的一部分.因此,你做不到:

using TConstExprFunction  = constexpr int (*)(int i, int j);
Run Code Online (Sandbox Code Playgroud)

因为在using TConstExprFunction =预期一种类型之后.