2010-11-23 Benjamin Kosnik <bkoz@redhat.com>
* include/std/chrono: Constexpr markup for is_monotonic.
* src/chrono.cc: Same.
* testsuite/20_util/clocks/1.cc: Move...
* testsuite/20_util/system_clock/1.cc: ...here.
* testsuite/20_util/system_clock/constexpr_data.cc
* testsuite/20_util/monotonic_clock/constexpr_data.cc
* include/std/complex: Mark primary template constexpr.
* testsuite/26_numerics/complex/cons/constexpr_primary.cc: Add.
* testsuite/26_numerics/complex/complex_value.cc: Move...
* testsuite/26_numerics/complex/dr387.cc: Move...
* testsuite/26_numerics/complex/value_operations/1.cc: ... here.
* testsuite/26_numerics/complex/value_operations/dr387.cc: ...here.
* testsuite/26_numerics/complex/value_operations/constexpr.cc: New.
2010-11-23 Benjamin Kosnik <bkoz@redhat.com>
Jason Merrill <jason@redhat.com>
* testsuite/lib/libstdc++.exp: Use scanasm.
* testsuite/util/testsuite_common_types.h
(constexpr_default_constructible): Add support for non-literal types.
(constexpr_single_value_constructible): Same.
* testsuite/20_util/enable_shared_from_this/cons/constexpr.cc:
Remove xfail.
* testsuite/20_util/shared_ptr/cons/constexpr.cc: Add.
* testsuite/20_util/unique_ptr/cons/constexpr.cc: Add.
* testsuite/20_util/weak_ptr/cons/constexpr.cc: Add.
* testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust line number.
2010-11-23 Benjamin Kosnik <bkoz@redhat.com>
Jonathan Wakely <jwakely.gcc@gmail.com>
* include/std/future (shared_future): Default ctor constexpr.
(future): Same.
* testsuite/30_threads/shared_future/cons/constexpr.cc: New.
* testsuite/30_threads/future/cons/constexpr.cc: New.
===================================================================
@@ -37,7 +37,7 @@
namespace chrono
{
- const bool system_clock::is_monotonic;
+ constexpr bool system_clock::is_monotonic;
system_clock::time_point
system_clock::now() throw ()
@@ -61,7 +61,7 @@
}
#ifdef _GLIBCXX_USE_CLOCK_MONOTONIC
- const bool monotonic_clock::is_monotonic;
+ constexpr bool monotonic_clock::is_monotonic;
monotonic_clock::time_point
monotonic_clock::now()
===================================================================
@@ -556,7 +556,7 @@
explicit
__basic_future(future<_Res>&&);
- __basic_future() { }
+ constexpr __basic_future() : _M_state() { }
struct _Reset
{
@@ -584,7 +584,7 @@
future(const __state_type& __state) : _Base_type(__state) { }
public:
- future() : _Base_type() { }
+ constexpr future() : _Base_type() { }
/// Move constructor
future(future&& __uf) : _Base_type(std::move(__uf)) { }
@@ -625,7 +625,7 @@
future(const __state_type& __state) : _Base_type(__state) { }
public:
- future() : _Base_type() { }
+ constexpr future() : _Base_type() { }
/// Move constructor
future(future&& __uf) : _Base_type(std::move(__uf)) { }
@@ -666,7 +666,7 @@
future(const __state_type& __state) : _Base_type(__state) { }
public:
- future() : _Base_type() { }
+ constexpr future() : _Base_type() { }
/// Move constructor
future(future&& __uf) : _Base_type(std::move(__uf)) { }
@@ -698,7 +698,7 @@
typedef __basic_future<_Res> _Base_type;
public:
- shared_future() : _Base_type() { }
+ constexpr shared_future() : _Base_type() { }
/// Copy constructor
shared_future(const shared_future& __sf) : _Base_type(__sf) { }
@@ -742,7 +742,7 @@
typedef __basic_future<_Res&> _Base_type;
public:
- shared_future() : _Base_type() { }
+ constexpr shared_future() : _Base_type() { }
/// Copy constructor
shared_future(const shared_future& __sf) : _Base_type(__sf) { }
@@ -781,7 +781,7 @@
typedef __basic_future<void> _Base_type;
public:
- shared_future() : _Base_type() { }
+ constexpr shared_future() : _Base_type() { }
/// Copy constructor
shared_future(const shared_future& __sf) : _Base_type(__sf) { }
===================================================================
@@ -228,7 +228,7 @@
&& (treat_as_floating_point<rep>::value
|| !treat_as_floating_point<_Rep2>::value)>::type>
constexpr explicit duration(const _Rep2& __rep)
- : __r(static_cast<rep>(__rep)) { }
+ : __r(static_cast<rep>(__rep)) { }
template<typename _Rep2, typename _Period2, typename = typename
enable_if<treat_as_floating_point<rep>::value
@@ -644,22 +644,22 @@
struct system_clock
{
#ifdef _GLIBCXX_USE_CLOCK_REALTIME
- typedef chrono::nanoseconds duration;
+ typedef chrono::nanoseconds duration;
#elif defined(_GLIBCXX_USE_GETTIMEOFDAY)
- typedef chrono::microseconds duration;
+ typedef chrono::microseconds duration;
#else
- typedef chrono::seconds duration;
+ typedef chrono::seconds duration;
#endif
- typedef duration::rep rep;
- typedef duration::period period;
- typedef chrono::time_point<system_clock, duration> time_point;
+ typedef duration::rep rep;
+ typedef duration::period period;
+ typedef chrono::time_point<system_clock, duration> time_point;
static_assert(system_clock::duration::min()
< system_clock::duration::zero(),
"a clock's minimum duration cannot be less than its epoch");
- static const bool is_monotonic = false;
+ static constexpr bool is_monotonic = false;
static time_point
now() throw ();
@@ -685,12 +685,12 @@
/// monotonic_clock
struct monotonic_clock
{
- typedef chrono::nanoseconds duration;
- typedef duration::rep rep;
- typedef duration::period period;
- typedef chrono::time_point<monotonic_clock, duration> time_point;
+ typedef chrono::nanoseconds duration;
+ typedef duration::rep rep;
+ typedef duration::period period;
+ typedef chrono::time_point<monotonic_clock, duration> time_point;
- static const bool is_monotonic = true;
+ static constexpr bool is_monotonic = true;
static time_point
now();
===================================================================
@@ -529,12 +529,12 @@
// Values
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _Tp>
- inline _Tp
+ inline constexpr _Tp
real(const complex<_Tp>& __z)
{ return __z.real(); }
template<typename _Tp>
- inline _Tp
+ inline constexpr _Tp
imag(const complex<_Tp>& __z)
{ return __z.imag(); }
#else
===================================================================
@@ -0,0 +1,32 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x -fno-inline -save-temps" }
+// { dg-final { scan-assembler-not "_ZNSt13shared_futureIvEC2Ev" } }
+// { dg-final { scan-assembler-not "_ZNSt13shared_futureIiEC2Ev" } }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <future>
+#include <testsuite_common_types.h>
+
+int main()
+{
+ __gnu_test::constexpr_default_constructible test; //not literal
+ test.operator()<std::shared_future<int>>();
+ test.operator()<std::shared_future<void>>();
+ return 0;
+}
===================================================================
@@ -0,0 +1,32 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x -fno-inline -save-temps" }
+// { dg-final { scan-assembler-not "_ZNSt6futureIvEC2Ev" } }
+// { dg-final { scan-assembler-not "_ZNSt6futureIiEC2Ev" } }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <future>
+#include <testsuite_common_types.h>
+
+int main()
+{
+ __gnu_test::constexpr_default_constructible test; //not literal
+ test.operator()<std::future<int>>();
+ test.operator()<std::future<void>>();
+ return 0;
+}
===================================================================
@@ -0,0 +1,57 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <complex>
+#include <testsuite_common_types.h>
+
+namespace __gnu_test
+{
+ struct constexpr_functions
+ {
+ template<typename _Ttesttype>
+ void
+ operator()()
+ {
+ struct _Concept
+ {
+ void __constraint()
+ {
+ typedef typename _Ttesttype::_ComplexT _ComplexT;
+ const _ComplexT cc = { 1.1 };
+ constexpr _Ttesttype a(cc);
+ constexpr auto v1 __attribute__((unused)) = real(a);
+ constexpr auto v2 __attribute__((unused)) = imag(a);
+ }
+ };
+
+ _Concept c;
+ c.__constraint();
+ }
+ };
+}
+
+int main()
+{
+ __gnu_test::constexpr_functions test;
+ test.operator()<std::complex<float>>();
+ test.operator()<std::complex<double>>();
+ test.operator()<std::complex<long double>>();
+ return 0;
+}
===================================================================
@@ -0,0 +1,67 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <complex>
+
+// User defined type, so that the primary std::complex template is used.
+namespace numext
+{
+ struct ldld_base
+ {
+ long double one;
+ long double two;
+ };
+
+ struct ldld_lit : public ldld_base
+ { };
+
+ struct ldld_nonlit : public ldld_base
+ {
+ ~ldld_nonlit() { }
+ };
+
+ bool
+ operator<(const ldld_base __a, const ldld_base __b)
+ { return __a.one < __b.one && __a.two < __b.two; }
+
+ bool
+ operator==(const ldld_base __a, const ldld_base __b)
+ { return __a.one == __b.one && __a.two == __b.two; }
+
+ ldld_base
+ operator+=(const ldld_base __a, const ldld_base __b)
+ { return ldld_base({ __a.one + __b.one, __a.two + __b.two}); }
+
+ ldld_base
+ operator-=(const ldld_base __a, const ldld_base __b)
+ { return ldld_base({ __a.one - __b.one, __a.two - __b.two}); }
+
+ ldld_base
+ operator*=(const ldld_base __a, const ldld_base __b)
+ { return ldld_base({ __a.one * __b.one, __a.two * __b.two}); }
+
+ ldld_base
+ operator/=(const ldld_base __a, const ldld_base __b)
+ { return ldld_base({ __a.one / __b.one, __a.two / __b.two}); }
+
+}
+
+constexpr std::complex<numext::ldld_lit> lit; // ok
+// constexpr std::complex<numext::ldld_nonlit> nonlit; // error
===================================================================
@@ -1,65 +0,0 @@
-// { dg-do run { xfail broken_cplxf_arg } }
-// { dg-options "-O0" }
-// 2000-11-20
-// Benjamin Kosnik bkoz@redhat.com
-
-// Copyright (C) 2000, 2003, 2004, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <complex>
-#include <testsuite_hooks.h>
-
-void test01()
-{
- using namespace std;
- bool test __attribute__((unused)) = true;
- typedef complex<double> complex_type;
- const double cd1 = -11.451;
- const double cd2 = -442.1533;
-
- complex_type a(cd1, cd2);
- double d;
- d = a.real();
- VERIFY( d == cd1 );
-
- d = a.imag();
- VERIFY( d == cd2 );
-
- complex_type c(cd1, cd2);
- double d6 = abs(c);
- VERIFY( d6 >= 0 );
-
- double d7 = arg(c);
- double d8 = atan2(c.imag(), c.real());
- VERIFY( d7 == d8 );
-
- double d9 = norm(c);
- double d10 = d6 * d6;
- VERIFY( d9 - d10 == 0 );
-
- complex_type e __attribute__((unused)) = conj(c);
-
- complex_type f = polar(c.imag(), 0.0);
- VERIFY( f.real() != 0 );
-}
-
-
-int main()
-{
- test01();
- return 0;
-}
===================================================================
@@ -1,51 +0,0 @@
-// 2008-05-22 Paolo Carlini <paolo.carlini@oracle.com>
-//
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <complex>
-#include <testsuite_hooks.h>
-
-// DR 387. std::complex over-encapsulated.
-template<typename T>
- void
- do_test()
- {
- bool test __attribute__((unused)) = true;
-
- const T r = 1.0;
- const T i = -1.0;
- const T v = 0.0;
-
- std::complex<T> z1(r, i);
- z1.real(v);
- VERIFY( z1.real() == v );
- VERIFY( z1.imag() == i );
-
- std::complex<T> z2(r, i);
- z2.imag(v);
- VERIFY( z2.real() == r );
- VERIFY( z2.imag() == v );
- }
-
-int main()
-{
- do_test<float>();
- do_test<double>();
- do_test<long double>();
- return 0;
-}
===================================================================
@@ -51,6 +51,7 @@
load_gcc_lib target-supports-dg.exp
load_lib prune.exp
load_lib dg-options.exp
+load_gcc_lib scanasm.exp
load_gcc_lib target-libpath.exp
load_gcc_lib timeout.exp
load_gcc_lib timeout-dg.exp
===================================================================
@@ -637,50 +637,77 @@
}
};
- // Generator to test constexpr constructor
#ifdef __GXX_EXPERIMENTAL_CXX0X__
// Generator to test default constructor.
struct constexpr_default_constructible
{
+ template<typename _Tp, bool _IsLitp = std::is_literal_type<_Tp>::value>
+ struct _Concept;
+
// NB: _Tp must be a literal type.
+ // Have to have user-defined default ctor for this to work.
template<typename _Tp>
+ struct _Concept<_Tp, true>
+ {
+ void __constraint()
+ { constexpr _Tp __obj; }
+ };
+
+ // Non-literal type, declare local static and verify no
+ // constructors generated for _Tp within the translation unit.
+ template<typename _Tp>
+ struct _Concept<_Tp, false>
+ {
+ void __constraint()
+ { static _Tp __obj; }
+ };
+
+ template<typename _Tp>
void
operator()()
{
- struct _Concept
- {
- // Have to have user-defined default ctor for this to work.
- void __constraint()
- { constexpr _Tp __v; }
- };
-
- void (_Concept::*__x)() __attribute__((unused))
- = &_Concept::__constraint;
+ _Concept<_Tp> c;
+ c.__constraint();
}
};
struct constexpr_single_value_constructible
{
- // NB: _Tbasetype and _Ttesttype must be literal types.
- template<typename _Ttesttype, typename _Tbasetype>
+ template<typename _Ttesttype, typename _Tvaluetype,
+ bool _IsLitp = std::is_literal_type<_Ttesttype>::value>
+ struct _Concept;
+
+ // NB: _Tvaluetype and _Ttesttype must be literal types.
+ // Additional constraint on _Tvaluetype needed. Either assume
+ // user-defined default ctor as per
+ // constexpr_default_constructible and provide no initializer,
+ // provide an initializer, or assume empty-list init-able. Choose
+ // the latter.
+ template<typename _Ttesttype, typename _Tvaluetype>
+ struct _Concept<_Ttesttype, _Tvaluetype, true>
+ {
+ void __constraint()
+ {
+ constexpr _Tvaluetype __v { };
+ constexpr _Ttesttype __obj(__v);
+ }
+ };
+
+ template<typename _Ttesttype, typename _Tvaluetype>
+ struct _Concept<_Ttesttype, _Tvaluetype, false>
+ {
+ void __constraint()
+ {
+ const _Tvaluetype __v { };
+ static _Ttesttype __obj(__v);
+ }
+ };
+
+ template<typename _Ttesttype, typename _Tvaluetype>
void
operator()()
{
- struct _Concept
- {
- // Additional constraint on _Tbasetype needed.
- // Either assume user-defined default ctor as per
- // constexpr_default_constructible and provide no
- // initializer, provide an initializer, or assume empty-list
- // init-able. Choose the latter.
- void __constraint()
- {
- constexpr _Tbasetype __v { };
- constexpr _Ttesttype __t(__v);
- }
- };
-
- _Concept c;
+ _Concept<_Ttesttype, _Tvaluetype> c;
c.__constraint();
}
};
===================================================================
@@ -0,0 +1,52 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <chrono>
+#include <testsuite_common_types.h>
+
+namespace __gnu_test
+{
+ struct constexpr_member_data
+ {
+ template<typename _Ttesttype>
+ void
+ operator()()
+ {
+ struct _Concept
+ {
+ void __constraint()
+ {
+ constexpr auto v1 __attribute__((unused))
+ = _Ttesttype::is_monotonic;
+ }
+ };
+
+ _Concept c;
+ c.__constraint();
+ }
+ };
+}
+
+int main()
+{
+ __gnu_test::constexpr_member_data test;
+ test.operator()<std::chrono::monotonic_clock>();
+ return 0;
+}
===================================================================
@@ -1,5 +1,7 @@
-// { dg-do compile { xfail *-*-* } }
-// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// { dg-options "-std=gnu++0x -fno-inline -save-temps" }
+// { dg-final { scan-assembler-not "_ZNSt23enable_shared_from_thisIiEC2Ev" } }
+// { dg-final { scan-assembler-not "_ZN7derivedC2Ev" } }
// Copyright (C) 2010 Free Software Foundation, Inc.
//
@@ -29,7 +31,6 @@
int main()
{
__gnu_test::constexpr_default_constructible test;
- test.operator()<derived>(); // { dg-excess-errors "" }
- derived d;
+ test.operator()<derived>();
return 0;
}
===================================================================
@@ -1,39 +0,0 @@
-// { dg-options "-std=gnu++0x" }
-// { dg-require-cstdint "" }
-
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-// 20.8.5 Clocks [time.clock]
-
-#include <chrono>
-
-// 20.8.5.1 system_clock [time.clock.system]
-int
-main()
-{
- using namespace std::chrono;
-
- system_clock::time_point t1 = system_clock::now();
- bool is_monotonic = system_clock::is_monotonic;
- is_monotonic = is_monotonic; // suppress unused warning
- std::time_t t2 = system_clock::to_time_t(t1);
- system_clock::time_point t3 = system_clock::from_time_t(t2);
- t3 = t3; // suppress unused warning
-
- return 0;
-}
===================================================================
@@ -0,0 +1,35 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x -fno-inline -save-temps" }
+// { dg-final { scan-assembler-not "_ZNSt10shared_ptrIiEC2Ev" } }
+// { dg-final { scan-assembler-not "_ZNSt10shared_ptrIiEC2EDn" } }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <testsuite_common_types.h>
+
+int main()
+{
+ __gnu_test::constexpr_default_constructible test1; //not literal
+ test1.operator()<std::shared_ptr<int>>();
+
+ __gnu_test::constexpr_single_value_constructible test2; //not literal
+ test2.operator()<std::shared_ptr<int>, std::nullptr_t>();
+
+ return 0;
+}
===================================================================
@@ -0,0 +1,35 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x -fno-inline -save-temps" }
+// { dg-final { scan-assembler-not "_ZNSt10unique_ptrIiSt14default_deleteIiEEC2Ev" } }
+// { dg-final { scan-assembler-not "_ZNSt10unique_ptrIiSt14default_deleteIiEEC2EDn" } }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <testsuite_common_types.h>
+
+int main()
+{
+ __gnu_test::constexpr_default_constructible test1; //not literal
+ test1.operator()<std::unique_ptr<int>>();
+
+ __gnu_test::constexpr_single_value_constructible test2; //not literal
+ test2.operator()<std::unique_ptr<int>, std::nullptr_t>();
+
+ return 0;
+}
===================================================================
@@ -0,0 +1,52 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <chrono>
+#include <testsuite_common_types.h>
+
+namespace __gnu_test
+{
+ struct constexpr_member_data
+ {
+ template<typename _Ttesttype>
+ void
+ operator()()
+ {
+ struct _Concept
+ {
+ void __constraint()
+ {
+ constexpr auto v1 __attribute__((unused))
+ = _Ttesttype::is_monotonic;
+ }
+ };
+
+ _Concept c;
+ c.__constraint();
+ }
+ };
+}
+
+int main()
+{
+ __gnu_test::constexpr_member_data test;
+ test.operator()<std::chrono::system_clock>();
+ return 0;
+}
===================================================================
@@ -0,0 +1,30 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x -fno-inline -save-temps" }
+// { dg-final { scan-assembler-not "_ZNSt8weak_ptrIiEC2Ev" } }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <testsuite_common_types.h>
+
+int main()
+{
+ __gnu_test::constexpr_default_constructible test; //not literal
+ test.operator()<std::weak_ptr<int>>();
+ return 0;
+}