aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2018-06-14 15:12:24 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2018-06-14 15:12:24 +0100
commite9ecac306b972a45e2a6a4385bdf2bdc7f7ed68c (patch)
tree1588c66da6304cb6c241c08dbf17f45ed0186a09 /libstdc++-v3
parent74755c6afcf45be8723e30f08b6e38ec105a636a (diff)
downloadgcc-e9ecac306b972a45e2a6a4385bdf2bdc7f7ed68c.zip
gcc-e9ecac306b972a45e2a6a4385bdf2bdc7f7ed68c.tar.gz
gcc-e9ecac306b972a45e2a6a4385bdf2bdc7f7ed68c.tar.bz2
P0935R0 Eradicating unnecessarily explicit default constructors
More pieces of P0935R0, making default constructors non-explicit. * include/backward/strstream (strstreambuf): Add non-explicit default constructor. * include/bits/locale_conv.h (wbuffer_convert, wstring_convert): Likewise. * include/bits/regex.h (match_results): Likewise. * testsuite/22_locale/conversions/buffer/1.cc: Test for non-explicit default constructor. * testsuite/22_locale/conversions/string/1.cc: Likewise. * testsuite/28_regex/match_results/ctors/char/default.cc: Likewise. * testsuite/28_regex/match_results/ctors/wchar_t/default.cc: Likewise. From-SVN: r261597
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog12
-rw-r--r--libstdc++-v3/include/backward/strstream5
-rw-r--r--libstdc++-v3/include/bits/locale_conv.h14
-rw-r--r--libstdc++-v3/include/bits/regex.h7
-rw-r--r--libstdc++-v3/testsuite/22_locale/conversions/buffer/1.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/conversions/string/1.cc7
-rw-r--r--libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc15
-rw-r--r--libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc15
8 files changed, 68 insertions, 11 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 5f61223..94541d1 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,17 @@
2018-06-14 Jonathan Wakely <jwakely@redhat.com>
+ P0935R0 Eradicating unnecessarily explicit default constructors
+ * include/backward/strstream (strstreambuf): Add non-explicit default
+ constructor.
+ * include/bits/locale_conv.h (wbuffer_convert, wstring_convert):
+ Likewise.
+ * include/bits/regex.h (match_results): Likewise.
+ * testsuite/22_locale/conversions/buffer/1.cc: Test for non-explicit
+ default constructor.
+ * testsuite/22_locale/conversions/string/1.cc: Likewise.
+ * testsuite/28_regex/match_results/ctors/char/default.cc: Likewise.
+ * testsuite/28_regex/match_results/ctors/wchar_t/default.cc: Likewise.
+
* include/std/tuple (__cpp_lib_tuple_element_t): Move feature test
macro from <utility> and change type to long.
* include/std/utility (__cpp_lib_tuple_element_t): Remove.
diff --git a/libstdc++-v3/include/backward/strstream b/libstdc++-v3/include/backward/strstream
index 0429c28..566ad8c 100644
--- a/libstdc++-v3/include/backward/strstream
+++ b/libstdc++-v3/include/backward/strstream
@@ -68,7 +68,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
public:
// Constructor, destructor
+#if __cplusplus >= 201103L
+ strstreambuf() : strstreambuf(0) { }
+ explicit strstreambuf(streamsize __initial_capacity);
+#else
explicit strstreambuf(streamsize __initial_capacity = 0);
+#endif
strstreambuf(void* (*__alloc)(size_t), void (*__free)(void*));
strstreambuf(char* __get, streamsize __n, char* __put = 0) throw ();
diff --git a/libstdc++-v3/include/bits/locale_conv.h b/libstdc++-v3/include/bits/locale_conv.h
index bc5669f..e9b684b 100644
--- a/libstdc++-v3/include/bits/locale_conv.h
+++ b/libstdc++-v3/include/bits/locale_conv.h
@@ -174,14 +174,17 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
typedef typename _Codecvt::state_type state_type;
typedef typename wide_string::traits_type::int_type int_type;
- /** Default constructor.
+ /// Default constructor.
+ wstring_convert() : _M_cvt(new _Codecvt()) { }
+
+ /** Constructor.
*
* @param __pcvt The facet to use for conversions.
*
* Takes ownership of @p __pcvt and will delete it in the destructor.
*/
explicit
- wstring_convert(_Codecvt* __pcvt = new _Codecvt()) : _M_cvt(__pcvt)
+ wstring_convert(_Codecvt* __pcvt) : _M_cvt(__pcvt)
{
if (!_M_cvt)
__throw_logic_error("wstring_convert");
@@ -325,7 +328,10 @@ _GLIBCXX_END_NAMESPACE_CXX11
public:
typedef typename _Codecvt::state_type state_type;
- /** Default constructor.
+ /// Default constructor.
+ wbuffer_convert() : wbuffer_convert(nullptr) { }
+
+ /** Constructor.
*
* @param __bytebuf The underlying byte stream buffer.
* @param __pcvt The facet to use for conversions.
@@ -334,7 +340,7 @@ _GLIBCXX_END_NAMESPACE_CXX11
* Takes ownership of @p __pcvt and will delete it in the destructor.
*/
explicit
- wbuffer_convert(streambuf* __bytebuf = 0, _Codecvt* __pcvt = new _Codecvt,
+ wbuffer_convert(streambuf* __bytebuf, _Codecvt* __pcvt = new _Codecvt,
state_type __state = state_type())
: _M_buf(__bytebuf), _M_cvt(__pcvt), _M_state(__state)
{
diff --git a/libstdc++-v3/include/bits/regex.h b/libstdc++-v3/include/bits/regex.h
index 674be9a..6b6501e 100644
--- a/libstdc++-v3/include/bits/regex.h
+++ b/libstdc++-v3/include/bits/regex.h
@@ -1600,12 +1600,17 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
/**
* @brief Constructs a default %match_results container.
* @post size() returns 0 and str() returns an empty string.
+ * @{
*/
+ match_results() : match_results(_Alloc()) { }
+
explicit
- match_results(const _Alloc& __a = _Alloc()) noexcept
+ match_results(const _Alloc& __a) noexcept
: _Base_type(__a)
{ }
+ // @}
+
/**
* @brief Copy constructs a %match_results.
*/
diff --git a/libstdc++-v3/testsuite/22_locale/conversions/buffer/1.cc b/libstdc++-v3/testsuite/22_locale/conversions/buffer/1.cc
index 5d0c664..0f3f9ff 100644
--- a/libstdc++-v3/testsuite/22_locale/conversions/buffer/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/conversions/buffer/1.cc
@@ -22,6 +22,7 @@
#include <locale>
#include <sstream>
#include <testsuite_hooks.h>
+#include <testsuite_common_types.h>
template<typename Elem>
struct cvt : std::codecvt<Elem, char, std::mbstate_t> { };
@@ -42,6 +43,9 @@ void test01()
VERIFY( buf.rdbuf(&sbuf) == nullptr );
VERIFY( buf.rdbuf() == &sbuf );
VERIFY( buf.rdbuf(nullptr) == &sbuf );
+
+ __gnu_test::implicitly_default_constructible test;
+ test.operator()<buf_conv<wchar_t>>(); // P0935R0
}
void test02()
diff --git a/libstdc++-v3/testsuite/22_locale/conversions/string/1.cc b/libstdc++-v3/testsuite/22_locale/conversions/string/1.cc
index ff26026..a2a8641 100644
--- a/libstdc++-v3/testsuite/22_locale/conversions/string/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/conversions/string/1.cc
@@ -22,6 +22,7 @@
#include <locale>
#include <string>
#include <testsuite_hooks.h>
+#include <testsuite_common_types.h>
template<typename Elem>
struct cvt : std::codecvt<Elem, char, std::mbstate_t> { };
@@ -43,6 +44,9 @@ void test01()
string roundtrip = c.to_bytes(output);
VERIFY( input == roundtrip );
VERIFY( c.converted() == roundtrip.length() );
+
+ __gnu_test::implicitly_default_constructible test;
+ test.operator()<sc>(); // P0935R0
}
void test02()
@@ -64,6 +68,9 @@ void test02()
VERIFY( c.to_bytes(output[0]) == input.substr(0, 1) );
VERIFY( c.to_bytes(output.c_str()) == input );
VERIFY( c.to_bytes(output.data(), output.data()+output.size()) == input );
+
+ __gnu_test::implicitly_default_constructible test;
+ test.operator()<wsc>(); // P0935R0
}
int main()
diff --git a/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc b/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc
index 6708c82..1023ad4 100644
--- a/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc
+++ b/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc
@@ -23,8 +23,9 @@
#include <regex>
#include <testsuite_hooks.h>
+#include <testsuite_common_types.h>
-// Tests default constructor of the match_result class.
+// Tests default constructor of the match_result class.
void test01()
{
std::cmatch cm;
@@ -43,10 +44,18 @@ void test02()
VERIFY( sm.begin() == sm.end() ); // PR libstdc++/83600
}
+void test03()
+{
+ // P0935R0
+ __gnu_test::implicitly_default_constructible test;
+ test.operator()<std::cmatch>();
+ test.operator()<std::smatch>();
+}
+
int
main()
-{
+{
test01();
test02();
- return 0;
+ test03();
}
diff --git a/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc b/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc
index 37bf580..f533f0e 100644
--- a/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc
+++ b/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc
@@ -23,8 +23,9 @@
#include <regex>
#include <testsuite_hooks.h>
+#include <testsuite_common_types.h>
-// Tests default constructor of the match_result class.
+// Tests default constructor of the match_result class.
void test01()
{
std::wcmatch cm;
@@ -43,10 +44,18 @@ void test02()
VERIFY( sm.begin() == sm.end() ); // PR libstdc++/83600
}
+void test03()
+{
+ // P0935R0
+ __gnu_test::implicitly_default_constructible test;
+ test.operator()<std::wcmatch>();
+ test.operator()<std::wsmatch>();
+}
+
int
main()
-{
+{
test01();
test02();
- return 0;
+ test03();
}