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

Do deduction guides require noexcept specifiers?

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

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

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

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

今天我用 ICC 做了一点工作,发现它在演绎指南上 noexcept 有问题。到目前为止,一切都很好。我认为这是编译器的错误,仅此而已。
但是,我去研究了标准,但找不到任何可以证实我最初假设的观点。因此,我针对 clang 检查了相同的内容,即使它没有问题地工作,似乎在 100% 的情况下推导指南上的 noexcept 被忽略了。另一方面,构造函数中的那个影响两者。

所以,我的问题是,它是否有意义,或者是否需要稍微 传播 (如果这完全有意义的话)noexcept-ness构造函数也适用于推导指南还是它没用,我可以删除推导​​指南上的所有 noexcept

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

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

如您所见,它不包含异常说明符。

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