Do not copy std:call_once arguments (LWG 2442)
authorJonathan Wakely <jwakely@redhat.com>
Wed, 12 Oct 2016 11:20:25 +0000 (12:20 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Wed, 12 Oct 2016 11:20:25 +0000 (12:20 +0100)
commit164b41ebf3e25bdb0b30e230591c463ce56df9d4
tree3216774db7ccc7f7708ef860c8e890d4286a89aa
parenta15ebbcde01c0d6b941f24fcb70cc1412a033b6d
Do not copy std:call_once arguments (LWG 2442)

* doc/xml/manual/intro.xml: Document LWG 2442 status.
* include/std/mutex [_GLIBCXX_HAVE_TLS] (__once_call_impl): Remove.
[_GLIBCXX_HAVE_TLS] (_Once_call): Declare primary template and define
partial specialization to unpack args and forward to std::invoke.
(call_once) [_GLIBCXX_HAVE_TLS]: Use forward_as_tuple and _Once_call
instead of __bind_simple and __once_call_impl.
(call_once) [!_GLIBCXX_HAVE_TLS]: Use __invoke instead of
__bind_simple.
* testsuite/30_threads/call_once/dr2442.cc: New test.

From-SVN: r241031
libstdc++-v3/ChangeLog
libstdc++-v3/doc/xml/manual/intro.xml
libstdc++-v3/include/std/mutex
libstdc++-v3/testsuite/30_threads/call_once/dr2442.cc [new file with mode: 0644]