From: redi Date: Tue, 25 Sep 2018 14:59:16 +0000 (+0000) Subject: PR libstdc++/87431 optimise valueless_by_exception() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bc35ec6d4ca5e90065942577a27af6c6088187fa;p=thirdparty%2Fgcc.git PR libstdc++/87431 optimise valueless_by_exception() If a std::variant can never get into valueless state then we don't need to do a runtime check for a valid alternative. PR libstdc++/87431 * include/std/variant (_Variant_storage::_M_valid): Avoid runtime test when all alternatives are scalars and so cannot throw during initialization. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@264574 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index ff5301774c7f..67b3eb4a94eb 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2018-09-25 Jonathan Wakely + + PR libstdc++/87431 + * include/std/variant (_Variant_storage::_M_valid): + Avoid runtime test when all alternatives are scalars and so cannot + throw during initialization. + 2018-09-25 Gerald Pfeifer * doc/xml/manual/codecvt.xml: Move link to "UTF-8 and Unicode FAQ" diff --git a/libstdc++-v3/include/std/variant b/libstdc++-v3/include/std/variant index 5a77e9e2d842..9289eef28cf6 100644 --- a/libstdc++-v3/include/std/variant +++ b/libstdc++-v3/include/std/variant @@ -439,6 +439,8 @@ namespace __variant constexpr bool _M_valid() const noexcept { + if constexpr ((is_scalar_v<_Types> && ...)) + return true; return this->_M_index != __index_type(variant_npos); }