[Bug libstdc++/87431] New: valueless_by_exception() should unconditionally return false if all the constructors are noexcept
antoshkka at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Sep 25 10:22:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87431
Bug ID: 87431
Summary: valueless_by_exception() should unconditionally return
false if all the constructors are noexcept
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: antoshkka at gmail dot com
Target Milestone: ---
Right now the variant::valueless_by_exception() calls !_M_valid() that is
defined like that:
_M_valid() const noexcept
{
return this->_M_index != __index_type(variant_npos);
}
Above code is quite complex for the optimizer. It may be profitable to detect
variant types that never have valueless_by_exception() state and re-implement
_M_valid:
_M_valid() const noexcept
{
return __always_valid::value /*compile-time constant*/ ||
this->_M_index != __index_type(variant_npos);
}
Such change would improve assembly for multiple functions including
comparisons, swap, get, constructors.
More information about the Gcc-bugs
mailing list