Hi Jonathan,
On 17 October 2016 at 13:56, Jonathan Wakely <jwak...@redhat.com> wrote: > In C++17 the emplace_front and emplace_back members return a > reference. There isn't a very neat way to implement this, so it's just > lots of conditional compilation. > > This isn't an ABI break, because these member functions are templates > and so the return type is part of the mangled name. We can't apply it > retroactively to older standards though, because it breaks code that > is valid in C++14, such as: > > void f(std::vector<int>& v) { return v.emplace_back(1); } > > > * doc/xml/manual/status_cxx2017.xml: Update status. > * doc/html/*: Regenerate. > * include/bits/deque.tcc (deque::emplace_front, > deque::emplace_back): > Return a reference in C++17 mode. > * include/bits/forward_list.h (forward_list::emplace_front): > Likewise. > * include/bits/stl_bvector.h (vector<bool>::emplace_back): Likewise. > * include/bits/stl_deque.h (deque::emplace_front, > deque::emplace_back): > Likewise. > * include/bits/stl_list.h (list::emplace_front, list::emplace_back): > Likewise. > * include/bits/stl_queue.h (queue::emplace): Likewise. > * include/bits/stl_stack.h (stack::emplace): Likewise. > * include/bits/stl_vector.h (vector::emplace_back): Likewise. > * include/bits/vector.tcc (vector::emplace_back): Likewise. > * include/debug/deque (__gnu_debug::deque::emplace_front) > (__gnu_debug::deque::emplace_back): Likewise. > * include/debug/vector (__gnu_debug::vector::emplace_back): > Likewise. > * testsuite/23_containers/deque/modifiers/emplace/cxx17_return.cc: > New. > * testsuite/23_containers/forward_list/modifiers/ > emplace_cxx17_return.cc: New. > * testsuite/23_containers/list/modifiers/emplace/cxx17_return.cc: > New. > * testsuite/23_containers/queue/members/emplace_cxx17_return.cc: > New. > * testsuite/23_containers/stack/members/emplace_cxx17_return.cc: > New. > * testsuite/23_containers/vector/bool/emplace_cxx17_return.cc: New. > * testsuite/23_containers/vector/modifiers/emplace/cxx17_return.cc: > New. > > Tested powerpc64le-linux, committed to trunk. > The new tests (except for 23_containers/forward_list/modifiers/emplace_cxx17_return.cc) fail on arm-none-eabi using default cpu/fpu/arch/mode: /aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-arm-none-eabi/gcc3/arm-none-eabi/libstdc++-v3/src/.libs/libstdc++.a(future.o): In function `__future_category_instance': /aci-gcc-fsf/sources/gcc-fsf/gccsrc/libstdc++-v3/src/c++11/future.cc:64: undefined reference to `__sync_synchronize' /aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-arm-none-eabi/gcc3/arm-none-eabi/libstdc++-v3/src/.libs/libstdc++.a(locale.o): In function `get_locale_cache_mutex': /aci-gcc-fsf/sources/gcc-fsf/gccsrc/libstdc++-v3/src/c++98/locale.cc:36: undefined reference to `__sync_synchronize' /aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-arm-none-eabi/gcc3/arm-none-eabi/libstdc++-v3/src/.libs/libstdc++.a(locale_init.o): In function `get_locale_mutex': /aci-gcc-fsf/sources/gcc-fsf/gccsrc/libstdc++-v3/src/c++98/locale_init.cc:66: undefined reference to `__sync_synchronize' Christophe