Visual C++中含auto推导返回值的函数类型别名是否属标准计划特性?
MSVC带auto的函数类型别名:标准现状与相关提案
你提到的MSVC独有的特性可以通过这段代码体现:
auto l = +[]{ return 42; }; struct A { typedef auto T(); static inline T* f = l; }; int main() { return A::f(); }
在MSVC中,T会被视为返回值待推导的无参函数类型,A::f作为函数指针时,返回值会从初始化器l推导为int,最终程序返回42。但GCC、Clang等其他主流C++编译器都会拒绝这类代码。
针对你的问题,结论如下:
- 目前无计划纳入C++标准:这一写法既不是现有C标准的内容,也没有明确的未来C版本计划支持它。
- 相关提案未获通过:曾有提案尝试扩展
auto在类型别名中的使用,比如P0696R1《Type aliases for deduced types》,该提案意图允许通过using Alias = auto;让别名从初始化器推导类型,但最终未被纳入标准,且它的设计场景和MSVC这种函数类型的推导逻辑并不完全一致。其他涉及auto的提案(如针对非类型模板参数的P0127R1)均不覆盖这类函数类型别名的场景。
简言之,MSVC的这个特性是专属编译器扩展,没有对应的标准提案正在推进,也没有被纳入未来C++标准的明确计划。
内容的提问来源于stack exchange,提问作者Fedor
相关产品推荐
相关产品推荐

