演绎指南是否需要noexcept说明符?

出于某些原因,我一直认为演绎指南必须具有noexcept它们所引用的构造函数的相同性。例如:

template<typename T>
struct clazz {
    clazz(const T &) noexcept {}
};

clazz(const char &) noexcept -> clazz<int>;

也就是说,如果构造函数是noexcept并且我也希望它也是 for const char &,我还必须将说明noexcept符添加到演绎指南中。

今天我和 ICC 合作了一下,发现它noexcept在扣除指南上有问题。到现在为止还挺好。我认为这是编译器的错误,仅此而已。
然而,我去研究了标准,找不到任何可以证实我最初假设的点。因此,我对 clang 进行了相同的检查,即使它没有问题,但似乎noexcept在 100% 的情况下,扣除指南上的 。另一方面,构造函数中的那个会影响两者。

所以,我的问题是,它使任何意义还是需要有点传播(如果这根本是有道理的)的noexcept构造函数的-ness还要扣除引导或者是无用的,我可以摆脱所有的noexcept上扣除指南?

回答

演绎指南的语法在[temp.deduct.guide]/1 中定义为

explicit-specifier(opt) template-name ( parameter-declaration-clause ) -> simple-template-id ;

正如您所看到的,它不包含异常说明符。

这确实有道理。演绎指南实际上并没有构建任何东西。它只是用来告诉编译器如何从一组参数中获取模板参数。您有一个两步过程,推导指南通过重载决议运行以确定模板参数,然后使用这些推导的模板参数枚举构造函数,并针对构造函数运行重载决议。

  • @skypjack Yep. It's a heck of a lot less egregious then GCC's default acceptance of VLA's though.

以上是演绎指南是否需要noexcept说明符?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>