Created on 2019-10-16.00:00:00 last changed 6 months ago
This wording is relative to N4835.
Modify [any.nonmembers] as indicated:
template<class T> const T* any_cast(const any* operand) noexcept; template<class T> T* any_cast(any* operand) noexcept;
-9- Returns: If operand != nullptr && operand->type() == typeid(T) , a pointer to the object contained by operand; otherwise, nullptr.[…]
[ 2020-02 Discussion in Prague did not reach consensus. Status to Open. ]
There was discussion about whether or not any_cast<void>(a) should be ill-formed, or return nullptr.
Poll "should it return nullptr" was 0-4-5-5-1.
[ 2019-11 Priority to 2 during Monday issue prioritization in Belfast. There is implementation divergence here. ]
any foo; void* p = any_cast<void>(&foo);
Per [any.nonmembers]/9, since the operand isn't nullptr and operand->type() == typeid(T) (because T = void in this case), we should return a pointer to the object contained by operand. But there is no such object.We need to handle the T = void case, probably by just explicitly returning nullptr.
|2020-02-14 06:55:06||admin||set||messages: + msg11093|
|2020-02-14 06:55:06||admin||set||status: new -> open|
|2019-11-04 13:23:43||admin||set||messages: + msg10725|
|2019-10-19 20:23:42||admin||set||messages: + msg10707|