diff gcc/testsuite/g++.dg/ext/pr94197.C @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/g++.dg/ext/pr94197.C	Mon May 25 07:50:57 2020 +0900
@@ -0,0 +1,74 @@
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+  T&& declval() noexcept;
+
+template<bool B>
+struct bool_constant
+{
+  static constexpr bool value = B;
+  using type = bool_constant;
+};
+
+using true_type = bool_constant<true>;
+using false_type = bool_constant<false>;
+
+template<bool, typename T, typename Arg>
+  struct __is_nt_constructible_impl
+  : public false_type
+  { };
+
+template<typename T, typename Arg>
+  struct __is_nt_constructible_impl<true, T, Arg>
+  : public bool_constant<noexcept(static_cast<T>(declval<Arg>()))>
+  { };
+
+template<typename T, typename Arg>
+  using __is_nothrow_constructible_impl
+    = __is_nt_constructible_impl<__is_constructible(T, Arg), T, Arg>;
+
+template<typename T>
+  struct __is_nothrow_copy_constructible_impl
+  : public __is_nothrow_constructible_impl<T, const T&>
+  { };
+
+template<typename T>
+  struct is_nothrow_copy_constructible
+  : public __is_nothrow_copy_constructible_impl<T>::type
+  { };
+
+template<bool, typename T, typename Arg>
+  struct __is_nt_assignable_impl
+  : public false_type
+  { };
+
+template<typename T, typename Arg>
+  struct __is_nt_assignable_impl<true, T, Arg>
+  : public bool_constant<noexcept(declval<T&>() = declval<Arg>())>
+  { };
+
+template<typename T, typename Arg>
+  using __is_nothrow_assignable_impl
+    = __is_nt_assignable_impl<__is_assignable(T, Arg), T, Arg>;
+
+template<typename T>
+  struct __is_nothrow_copy_assignable_impl
+  : public __is_nothrow_assignable_impl<T, const T&>
+  { };
+
+template<typename T>
+  struct is_nothrow_copy_assignable
+  : public __is_nothrow_copy_assignable_impl<T>::type
+  { };
+
+struct NType
+{
+  NType();
+private:
+  NType(const NType&);
+  NType& operator=(const NType&);
+};
+
+
+static_assert( !is_nothrow_copy_constructible<NType>::value, "" );
+static_assert( !is_nothrow_copy_assignable<NType>::value, "" );