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函数定义一个类型别名; 如果有,怎么样?
根据C++标准7.1.5/p8 constexpr
说明符[dcl.constexpr](Emphasis Mine):
该
constexpr
说明符对一个类型没有影响constexpr
功能或constexpr
构造.
同样来自7个声明[dcl.dcl]:
Run Code Online (Sandbox Code Playgroud)alias-declaration: using identifier attribute-specifier-seqopt = defining-type-id ;
constexpr
说明符不是函数类型的一部分.因此,你做不到:
using TConstExprFunction = constexpr int (*)(int i, int j);
Run Code Online (Sandbox Code Playgroud)
因为在using TConstExprFunction =
预期一种类型之后.
归档时间: |
|
查看次数: |
547 次 |
最近记录: |