【发布时间】:2019-06-16 01:23:43
【问题描述】:
为什么下面的代码不能在 MSVC 上编译
#include <vector>
void func(double (* fptr)(double), const std::vector<double> & v = {})
{
}
我收到以下错误。
source_file.cpp(6): 错误 C2065: 'fptr': 未声明的标识符
source_file.cpp(6): error C2062: type 'double' unexpected
source_file.cpp(6):错误 C2143:语法错误:缺少 ';'在'{'之前
source_file.cpp(6):错误 C2143:语法错误:在 ';' 之前缺少 ')'
source_file.cpp(6): error C2447: '{': 缺少函数头(旧式正式列表?)
source_file.cpp(6):错误 C2059:语法错误:')'
source_file.cpp(7): error C2447: '{': 缺少函数头(旧式正式列表?)
Microsoft (R) C/C++ 优化编译器版本 19.00.23506 for x64
当我删除任何一个 - 向量默认值时:
void func(double (* fptr)(double), const std::vector<double> & v)
或函数指针:
void func(const std::vector<double> & v = {})
错误消失。是一些 MSVC 错误还是我遗漏了什么?
Clang 和 G++ 的代码都没有问题。
【问题讨论】:
-
您使用的是什么版本的 MSVC?这对我来说像是一个错误。
-
@NathanOliver,在我自己的机器 MSVC2015 上,rexester 报告
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506。 -
好的。我现在正在更新到 2017 的最新版本进行测试。 15.8.7 失败。
-
好吧,版本 15.9.5 也因编译器 19.16.27026.1 而失败。看起来该问题已报告给开发者社区(无法弄清楚如何获取链接),但它没有状态或确认。
标签: c++ visual-c++ function-pointers initializer-list default-arguments