Tweak static assertions in std::optional
authorJonathan Wakely <jwakely@redhat.com>
Mon, 8 May 2017 17:13:38 +0000 (18:13 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Mon, 8 May 2017 17:13:38 +0000 (18:13 +0100)
* include/std/optional: Use a separate static_assert per condition.
* testsuite/20_util/optional/cons/value_neg.cc: Update dg-error line
numbers.

From-SVN: r247748

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/optional
libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc

index b5a67190e79ac3af812633e90d26004121b02b00..f285939926652589a5e3a7ca2416a8694809d961 100644 (file)
@@ -1,5 +1,9 @@
 2017-05-08  Jonathan Wakely  <jwakely@redhat.com>
 
+       * include/std/optional: Use a separate static_assert per condition.
+       * testsuite/20_util/optional/cons/value_neg.cc: Update dg-error line
+       numbers.
+
        * doc/xml/manual/mt_allocator.xml: Clarify deallocation behaviour.
        * doc/html/*: Regenerate.
 
index 17241204abb3b3f07ed8c3e0088816a962a87775..5aa926f0cfd84727c59e08d6dcf36f232f05911b 100644 (file)
@@ -462,10 +462,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
         // Unique tag type.
         optional<_Tp>>
     {
-      static_assert(__and_<__not_<is_same<remove_cv_t<_Tp>, nullopt_t>>,
-                          __not_<is_same<remove_cv_t<_Tp>, in_place_t>>,
-                          __not_<is_reference<_Tp>>>(),
-                    "Invalid instantiation of optional<T>");
+      static_assert(!is_same_v<remove_cv_t<_Tp>, nullopt_t>);
+      static_assert(!is_same_v<remove_cv_t<_Tp>, in_place_t>);
+      static_assert(!is_reference_v<_Tp>);
 
     private:
       using _Base = _Optional_base<_Tp>;
@@ -756,9 +755,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        constexpr _Tp
        value_or(_Up&& __u) const&
        {
-         static_assert(__and_<is_copy_constructible<_Tp>,
-                              is_convertible<_Up&&, _Tp>>(),
-                       "Cannot return value");
+         static_assert(is_copy_constructible_v<_Tp>);
+         static_assert(is_convertible_v<_Up&&, _Tp>);
 
          return this->_M_is_engaged()
            ? this->_M_get()
@@ -769,9 +767,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        _Tp
        value_or(_Up&& __u) &&
        {
-         static_assert(__and_<is_move_constructible<_Tp>,
-                              is_convertible<_Up&&, _Tp>>(),
-                       "Cannot return value" );
+         static_assert(is_move_constructible_v<_Tp>);
+         static_assert(is_convertible_v<_Up&&, _Tp>);
 
          return this->_M_is_engaged()
            ? std::move(this->_M_get())
index 87907f96d137e87b666274f9d6c1a25f2bf018ca..5abe26e433d396f2787264496fe301504a6380c8 100644 (file)
@@ -37,8 +37,8 @@ int main()
     std::optional<std::unique_ptr<int>> oup2 = new int;  // { dg-error "conversion" }
     struct U { explicit U(std::in_place_t); };
     std::optional<U> ou(std::in_place); // { dg-error "no matching" }
-    // { dg-error "no type" "" { target { *-*-* } } 488 }
-    // { dg-error "no type" "" { target { *-*-* } } 498 }
-    // { dg-error "no type" "" { target { *-*-* } } 555 }
+    // { dg-error "no type" "" { target { *-*-* } } 487 }
+    // { dg-error "no type" "" { target { *-*-* } } 497 }
+    // { dg-error "no type" "" { target { *-*-* } } 554 }
   }
 }