在Windows上与Ubuntu上的C 17对齐

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

本文关键字:对齐 上的 Ubuntu Windows 上与      更新时间:2023-10-16

我试图在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上编译和工作正常,但是当尝试使用Visual Studio 2017(v141)在Windows上进行编译[ISO C 最新草稿标准(/STD:C 最新)],然后我会得到以下内容:blockquote>

错误C3533:一个参数不能具有包含"自动"'''

的类型

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

如果我可以设置编译器将自动用作参数和参数包使用,那就是最好的,但是如果不可能,那么我将不得不重写我的代码以遵循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)

应该按预期工作。