为什么我的Visual Studio 2017编译器无法识别C++17类型推导指南
Why does my Visual Studio 2017 compiler not recognize C++17 type deduction guides
My Visual Studio 2017不会识别此代码中的类型推导指南,也不会编译:
template<typename T>
class Example{
public:
Example(T& pVal)
:val(pVal){}
T& val;
};
//type deduction guide for Example constructor
template<typename T>
Example(T&)->Example<T>;
尽管如此,根据我的消息来源,这应该是C++17类型推导指南的正确语法,并且它与它应该指导的类在相同的范围内定义。
如何修改Visual Studio C++编译器以识别此功能?
升级编译器。
我们先等一下。阅读发行说明,我没有在更新3、4或5的预览中看到它。
c++17在MSVC中的支持仍然是实验性的和不完整的。c++14和c++11的支持仅仅保持不完整(主要围绕SFINAE),但不再是实验性的。
Visual studio附带了clang和microsoft的混合编译器。当MSVC将clang-c2更新到clang5.0编译器时,它应该支持这一点(上次我检查它是3.8)
Clang 5 LLVM for windows可以下载,但它与visual studio的集成很有挑战性,有些你想做的事情可能根本不起作用。但它确实支持演绎指南。
将visual studio修改为使用Clang 5不仅仅是一项工作。你可以做的一件事是编写一个系统,从一些依赖项和项目描述文件中构建vcproj和makefile。在编辑代码时,使用makefile进行构建,而vcproj只是为了启用intellisense(我相信它不会理解你的推导指南)。(我曾在一些地方工作过,这些地方大致相当于python、批处理文件、makefile本身的组合,有时甚至是C#)。
这(创建自己的构建链)本身就是一个项目。
我看到的另一种方法是生成vcproj文件,并手工制作makefiles。如果你的项目目录结构足够简单,那么写一个足够好的vcproj来做intellisense就不难了。
- 将类型添加到现有模板而不删除 c++17
- 在 C++17 中调用具有不同参数类型的构造函数
- 如何使用变量模板比较 C++ 17 中的变量类型?
- 如何在 C++17 中检索 std::filesystem::file_time_type 的时钟类型
- C++17:在编译时将类型映射到整数值
- c++17通过生成预先声明的类型列表的笛卡尔乘积来生成std::变体
- 在C++17中,为什么类模板和函数模板的指针类型推导明显不一致
- 有没有办法在 C++17 中创建编译时类型映射以进行类型检查?
- 使用 C++17,如何创建类型到值的编译时图?
- 在 c++17 中筛选类型元组
- 检查模板类型 T 是否为 C++17 中的可变参数包的一部分
- 在 C++17 中的每个实例化时生成一个新类型
- 有关 C++17 中的尾随返回类型的问题
- C 17依赖性名称不是类型,而是在C 中工作
- 在C 17/C 2A中以编译时的散列类型
- C 17类模板参数类型扣除 - 可读性
- C++17 可选树,错误:无效使用不完整的类型
- C++17 用于初始化模板类的折叠表达式的极限类型
- Clang和GCC在转换C++17中非类型模板参数的自动说明符中存在分歧
- 自 C++17 年以来,具有正确地址和类型的指针始终是有效的指针