【发布时间】:2021-07-05 11:27:37
【问题描述】:
出于某些原因,我一直认为推导指南必须与它们所引用的构造函数具有相同的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去掉?
【问题讨论】:
-
来自cppreference,语法为
explicit-specifier(optional) template-name ( parameter-declaration-clause ) -> simple-template-id ;;没有noexcept...
标签: c++ templates c++17 language-lawyer deduction-guide