diff options
Diffstat (limited to 'libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/8.cc')
-rw-r--r-- | libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/8.cc | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/8.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/8.cc index 0fee57826229..734573768d76 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/8.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/8.cc @@ -15,16 +15,31 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. +// { dg-options "-O0" } // { dg-do run { target c++11 } } #include <string> #include <testsuite_hooks.h> +struct TestBaseObjCtor : std::wstring +{ + template<typename... Args> + TestBaseObjCtor(Args&&... args) + : std::wstring(std::forward<Args>(args)...) + { } +}; + template<typename... Args> std::size_t construct(Args&&... args) { - return std::wstring( std::forward<Args>(args)... ).length(); + // Use static_cast<Args> to produce either an lvalue or prvalue, + // so args... not left in moved-from state and can be reused below: + TestBaseObjCtor as_base_obj( static_cast<Args>(args)... ); + + std::wstring as_complete_obj( std::forward<Args>(args)... ); + + return as_complete_obj.length(); } void |