As discussed in PR c++/80265 ("__builtin_{memcmp,memchr,strlen} are
not usable in constexpr functions"), use __builtin_constant_p to tell
whether we can defer to a constexpr algorithm.
I used __always_inline__ just to be thorough. It isn't really really
necessary as far as I could determine.
Changes like these:
if (__n == 0)
return 0;
- return wmemcmp(__s1, __s2, __n);
+ else
+ return wmemcmp(__s1, __s2, __n);
are necessary otherwise G++ complains that we're calling a
non-constexpr function, which looks like a a manifestation of PR67026
to me.
libstdc++-v3:
2017-06-12 Pedro Alves <palves@redhat.com>
* doc/xml/manual/status_cxx2017.xml: Update C++17 constexpr
char_traits status.
* doc/html/*: Regenerate.
* include/bits/char_traits.h (_GLIBCXX_ALWAYS_INLINE): Define if
not already defined.
(__cpp_lib_constexpr_char_traits): Uncomment.
(__constant_string_p, __constant_char_array_p): New.
(std::char_traits<char>, std::char_traits<wchar_t>): Add
_GLIBCXX17_CONSTEXPR on compare, length and find and use
__constant_string_p, __constant_char_array_p and
__builtin_constant_p to defer to __gnu_cxx::char_traits at compile
time.
* testsuite/21_strings/char_traits/requirements/
constexpr_functions_c++17.cc: Uncomment
__cpp_lib_constexpr_char_traits tests. Uncomment
test_compare<char>, test_length<char>, test_find<char>,
test_compare<wchar_t>, test_length<wchar_t> and test_find<wchar_t>
static_assert tests.
From-SVN: r249137
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| 17_intro | Loading commit data... | |
| 18_support | Loading commit data... | |
| 19_diagnostics | Loading commit data... | |
| 20_util | Loading commit data... | |
| 21_strings | Loading commit data... | |
| 22_locale | Loading commit data... | |
| 23_containers | Loading commit data... | |
| 24_iterators | Loading commit data... | |
| 25_algorithms | Loading commit data... | |
| 26_numerics | Loading commit data... | |
| 27_io | Loading commit data... | |
| 28_regex | Loading commit data... | |
| 29_atomics | Loading commit data... | |
| 30_threads | Loading commit data... | |
| abi | Loading commit data... | |
| backward | Loading commit data... | |
| config | Loading commit data... | |
| data | Loading commit data... | |
| decimal | Loading commit data... | |
| experimental | Loading commit data... | |
| ext | Loading commit data... | |
| lib | Loading commit data... | |
| libstdc++-abi | Loading commit data... | |
| libstdc++-dg | Loading commit data... | |
| libstdc++-prettyprinters | Loading commit data... | |
| libstdc++-xmethods | Loading commit data... | |
| performance | Loading commit data... | |
| special_functions | Loading commit data... | |
| tr1 | Loading commit data... | |
| tr2 | Loading commit data... | |
| util | Loading commit data... | |
| Makefile.am | Loading commit data... | |
| Makefile.in | Loading commit data... |