-
Notifications
You must be signed in to change notification settings - Fork 7
Description
Full name of submitter: Mital Ashok
Reference: [temp.dep.constexpr]
Issue description: Whether the operand of a noexcept
operator is type-dependent is not enough to know if the noexcept
operator is value-dependent. There are plenty of non-type-dependent expressions where whether or not it is potentially-throwing is dependent.
For example:
template<typename T>
void f() {
noexcept(new int(T{}));
noexcept(static_cast<int>(T{}));
noexcept(typeid(*T{}));
noexcept(delete T{});
}
GCC already treats all of these as value-dependent. Clang treats noexcept(new int(T{}))
as a not value-dependent false
but the rest of them as value-dependent.
Suggested resolution:
Remove noexcept
from [temp.dep.constexpr]p2 so it becomes value-dependent if its operand is value-dependent according to [temp.dep.constexpr]p1
Expressions of the following form are value-dependent if the unary-expression or expression is type-dependent or the type-id is dependent:
sizeof
unary-expression
[...]
noexcept
(
expression)