[Patch] Small refactor on <regex> _State<>
Jonathan Wakely
jwakely@redhat.com
Thu Jul 30 10:11:00 GMT 2015
On 29/07/15 21:55 -0700, Tim Shen wrote:
>- typedef _Matcher<typename _TraitsT::char_type> _MatcherT;
>+ typedef _Matcher<_Char_type> _MatcherT;
>+ static_assert(sizeof(_MatcherT) == sizeof(_Matcher<char>),
>+ "The aussmption std::function<bool(char)> has "
>+ "the same size as std::function<bool(T)> is violated");
>+ static_assert(alignof(_MatcherT) == alignof(_Matcher<char>),
>+ "The aussmption std::function<bool(char)> has "
>+ "the same alignment as std::function<bool(T)> is violated");
Good idea adding these assertions, but "aussmption" :-)
In accordance with https://gcc.gnu.org/bugzilla/show_bug.cgi?id=41759
we should avoid negative wording ("X is not Y" or "X does not meet Y")
in static assertions, so maybe something like:
static_assert(alignof(_MatcherT) == alignof(_Matcher<char>),
"std::function<bool(T)> has the same size as "
"std::function<bool(char)>");
or:
static_assert(alignof(_MatcherT) == alignof(_Matcher<char>),
"std::function<bool(T)> must have the same size as "
"std::function<bool(char)>");
>- _MatcherT _M_matches; // for _S_opcode_match
>+ _MatcherT&
>+ _M_get_matcher()
>+ { return *reinterpret_cast<_MatcherT*>(this->_M_matcher_storage._M_addr()); }
>
>- explicit _State(_Opcode __opcode) : _State_base(__opcode) { }
>+ const _MatcherT&
>+ _M_get_matcher() const
>+ { return *reinterpret_cast<const _MatcherT*>(this->_M_matcher_storage._M_addr()); }
These can use static_cast, because _M_addr() returns void*
OK for trunk with those two tweaks, thanks!
More information about the Libstdc++
mailing list