summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/8.cc
diff options
context:
space:
mode:
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.cc17
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