在Windows上与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上编译和工作正常,但是当尝试使用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)
应该按预期工作。
相关文章:
- 为什么我可以将变量存储在不是其最小对齐方式的倍数的地址?
- 使 std::vector 分配对齐内存的现代方法
- 具有调整对齐方式的类型定义
- 外部基础类型未按请求对齐时的atomic_ref
- gcc 是否在 2 条短裤的过度对齐结构的比较中错过了优化机会?
- 具有对齐存储的动态内存分配
- 使用字节数组具有单字节对齐方式的结构是否安全
- 需要帮助以稍微不同的方式对齐连续的作业
- C++中未对齐访问的正确性
- 基于对齐要求的优化
- 如何在结构中组织成员以在对齐上浪费最少的空间
- 右对齐三角形的间距
- 重载运算符是具有较小默认对齐方式的新增运算符
- 结构和对齐方式的大小
- 警告#13212:引用需要堆栈对齐功能的EBX
- 对齐指针的未对准访问
- 将网格与VTK相机对齐(相机的视觉表示,随之移动和旋转的网格)
- 用于小未对齐数据的快速内存
- x86-64上检查指针范围是否跨越N字节对齐地址的最快方法
- 在对齐大小的数组和非对齐大小的数组上速度不同