c++ - 为什么 auto 不能用作模板类型参数?

标签 c++ templates c++11

我一直在研究 C++0x 的 auto 关键字并尝试了以下方法。

std::unique_ptr<auto> ptr(new int(0));

我尝试用 g++ 4.4.5 编译它并得到了

error: invalid use of auto

通过肉眼判断,auto 很容易被推断为int

我的猜测是类型推断和模板引擎不会互相交谈。否则,模板引擎将知道以 int 作为类型参数来实例化模板类。

另一个猜测是来自标准,我看到了这个。

A member shall not be declared with auto, extern or register storage class.

但我认为这是局部变量中的 auto,而不是用于推导类型的 auto

我最后的猜测是编译器认为这是一个 auto 存储类,而不是用于类型推导的 auto

标准中说明了这背后的原因吗?

最佳答案

那是因为在确定如何处理其参数之前,它必须先确定调用构造函数的类。。如果您将构造函数设为模板,它将像任何其他模板函数一样工作 - 自动推导参数。

关于c++ - 为什么 auto 不能用作模板类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6851026/

相关文章:

c++ - 受比较器约束的数据结构

c++ - C++11 中的默认初始化?

c++ - "Flatten"嵌套 future

c++ - Boost Asio - 消息内容传输错误

c++ - 菜单程序中的 bool 函数

c++ - 如何将世界坐标转换为屏幕坐标

c++ - 模板化函数名称查找难题(ADL)

c++ - CAN 总线通信 - MSG 结构 (WinUser.h) Linux 等价物

C++ Win32 不检索编辑数据,即使编辑在范围内

c++ - 是否可以定义一个可以将模板化对象作为参数的非模板函数