windows 上的 C++17 是否与 ubuntu 上的 C++17 一致?

Is C++17 on windows in alignment with C++17 on ubuntu?

我正在尝试移植一些我在 ubuntu (gnu++11)

上编写的 C++17 代码
typedef boost::variant<int, float, std::string > Variant;
using Func = std::function<std::vector<unsigned char>(std::vector<Variant>)>;  

void addexecutorfunc( Func callback, const auto&...args )
{
    std::vector<Variant> vec = {args...}; 
    executor.add(vec, std::move(callback));
}

此代码在 ubuntu 上编译并运行良好,但是当尝试在 windows 上使用 visual studio 2017(v141) [ISO C++ 最新草案标准 (/std:c) 编译时++最新)],然后我得到以下信息:

error C3533: a parameter cannot have a type that contains 'auto'

我认为这可能与当前 C++17 版本中未实现的精简版概念有关,或者这是错误的?

如果我可以将编译器设置为使用 auto 作为参数和参数包,那将是最好的,但如果这不可能,那么我将不得不重写我的代码以遵循 C++17 windows 标准 - 关于如何在不陷入模板地狱的情况下执行此操作的任何建议

void addexecutorfunc( Func callback, const auto&...args )

auto 作为(非 lambda)函数的参数是 GNU 扩展。它不是标准 C++17 的一部分,并且不受其他两个主要 C++ 编译器 Clang 和 MSVC 的支持。不幸的是,GCC 似乎允许它在 -std=c++14 模式以及 -std=gnu++14.

模式下使用

标准的 C++ 等价物是一个函数模板

template <typename... Ts>
void addexecutorfunc(Func callback, const Ts&... args)

这应该会按预期工作。