为什么以下代码不能在MSVC 上编译
#include <vector>
void func(double (* fptr)(double), const std::vector<double> & v = {})
{
}
我收到以下错误。
source_file.cpp(6):错误C2065:"fptr":未声明的标识符
source_file.cpp(6):错误C2062:类型为"double"的意外
source_file.cpp(6):错误C2143:语法错误:缺少";"在"{"之前
source_file.cpp(6):错误C2143:语法错误:在";"之前缺少")">
source_file.cpp(6):错误C2447:"{":缺少函数头(旧式形式列表?)
source_file.cpp(6):错误C2059:语法错误:")">
source_file.cpp(7):错误C2447:"{":缺少函数头(旧式形式列表?)
用于x64 的Microsoft(R)C/C++优化编译器19.00.23506版
当我删除任一向量时-默认值:
void func(double (* fptr)(double), const std::vector<double> & v)
或函数指针:
void func(const std::vector<double> & v = {})
错误消失。是MSVC的漏洞还是我遗漏了什么?
Clang和G++的代码没有问题。
您可以使用签出代码https://rextester.com/l/cpp_online_compiler_visual
是MSVC错误还是我遗漏了什么?
你什么都没错过。这是微软风险投资公司的错误。你可以通过重载来解决它:
void func(double (* fptr)(double), const std::vector<double> & v)
{
}
void func(double (* fptr)(double)) {
std::vector<double> v;
func(fptr, v); // or just func(fptr, {})
}
尽管值得注意的是,取func
的地址现在是模糊的,这与您最初的完全符合标准的代码不同。