nsh*_*hct 14 c++ std move-semantics c++17
std::any
根据本Wiki中提供的规范实现C++ 17时,我偶然发现了一些对我来说荒谬的事情:
在自由函数的定义中std::any_cast
,用于从std::any
实例中检索值,提供了r值引用的重载(它是第三个):
template< class ValueType >
ValueType any_cast(any&& operand); // (3)
Run Code Online (Sandbox Code Playgroud)
现在,在概要下面列出的要求适用于重载2和3(这也意味着包括r值重载):
2-3)
返回*any_cast<std::remove_reference_t<ValueType>>(&operand)
该定义似乎实际上不允许移动数据!
函数调用只是重定向到基于指针的重载; 有关临时性质的信息operand
丢失了!
是不是我不能离开任何一个实例?这只是wiki中的一个错误吗?我错了吗?
Mar*_* A. 10
在撰写本文时,问题出现在WP状态,这意味着:
WP - (工作文件) - 提议的决议未被接受为技术勘误,但WG21/PL22.16的完整委员会已投票决定将缺陷报告的拟议决议应用于工作文件.
有关详细信息,请参阅lwg:http://wg21.cmeerw.net/lwg/issue2509
确实提出了一项决议案
对于第三种形式,if
is_move_constructible_v<ValueType>
为true且is_lvalue_reference_v<ValueType>
为falsestd::move(*any_cast<remove_reference_t<ValueType>>(&operand))
,否则,*any_cast<remove_reference_t<ValueType>>(&operand)
以及列出WP的缺陷报告列表:http://cplusplus.github.io/LWG/lwg-defects.html#2509
归档时间: |
|
查看次数: |
855 次 |
最近记录: |