This simplifies the conditions of some static assertions, using one
assertion per condition instead of asserting the conjunction. This
means we don't need any string literal, because the conditions are
quite readable now.

        * include/std/optional: Use a separate static_assert per condition.
        * testsuite/20_util/optional/cons/value_neg.cc: Update dg-error line
        numbers.

Tested powerpc64le-linux, committed to trunk.


commit 90daca5d8383567deaff9817c4cca92309573311
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Mon May 8 16:23:44 2017 +0100

    Tweak static assertions in std::optional
    
        * include/std/optional: Use a separate static_assert per condition.
        * testsuite/20_util/optional/cons/value_neg.cc: Update dg-error line
        numbers.

diff --git a/libstdc++-v3/include/std/optional 
b/libstdc++-v3/include/std/optional
index 1724120..5aa926f 100644
--- a/libstdc++-v3/include/std/optional
+++ b/libstdc++-v3/include/std/optional
@@ -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())
diff --git a/libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc 
b/libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc
index 87907f9..5abe26e 100644
--- a/libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc
@@ -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 }
   }
 }

Reply via email to