ser*_*rup 1 c++ visual-studio c++-concepts c++17
我试图移植一些我在ubuntu上制作的C++ 17代码(gnu ++ 11)
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));
}
Run Code Online (Sandbox Code Playgroud)
这段代码在ubuntu上编译和工作正常,但是当尝试使用visual studio 2017(v141)[ISO C++最新草案标准(/ std:c ++ latest)]在Windows上编译时,我得到以下内容:
错误C3533:参数不能包含'auto'的类型
我想也许它与在当前的C++ 17版本中没有实现的Concepts lite有关,或者这是错的?
如果我可以设置编译器使用auto作为参数和参数包,那么这将是最好的,但如果这是不可能的,那么我将不得不重写我的代码遵循C++ 17 windows标准 - 任何关于如何做的建议这没有在模板地狱中结束
void addexecutorfunc( Func callback, const auto&...args )
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
哪个应该按预期工作.
| 归档时间: |
|
| 查看次数: |
525 次 |
| 最近记录: |