On 2/21/20 2:14 PM, Marek Polacek wrote:
This was approved in the Prague 2020 WG21 meeting so let's adjust the
comment.  Since it's supposed to be a DR I think we should no longer
limit it to C++20.

I'm a bit nervous about the impact, but OK. It's easy enough to turn off -Wnarrowing if it's a problem for users.

Bootstrapped/regtested on x86_64-linux, ok for trunk?

2020-02-21  Marek Polacek  <pola...@redhat.com>

        P1957R2
        * typeck2.c (check_narrowing): Consider T* to bool narrowing
        in C++11 and up.

        * g++.dg/cpp0x/initlist92.C: Don't expect an error in C++20 only.
---
  gcc/cp/typeck2.c                        | 7 ++++---
  gcc/testsuite/g++.dg/cpp0x/initlist92.C | 2 +-
  2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index 48920894b3b..68bc2e5c170 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -1036,9 +1036,10 @@ check_narrowing (tree type, tree init, tsubst_flags_t 
complain,
      }
    else if (TREE_CODE (type) == BOOLEAN_TYPE
           && (TYPE_PTR_P (ftype) || TYPE_PTRMEM_P (ftype)))
-    /* This hasn't actually made it into C++20 yet, but let's add it now to get
-       an idea of the impact.  */
-    ok = (cxx_dialect < cxx2a);
+    /* C++20 P1957R2: converting from a pointer type or a pointer-to-member
+       type to bool should be considered narrowing.  This is a DR so is not
+       limited to C++20 only.  */
+    ok = false;
bool almost_ok = ok;
    if (!ok && !CONSTANT_CLASS_P (init) && (complain & tf_warning_or_error))
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist92.C 
b/gcc/testsuite/g++.dg/cpp0x/initlist92.C
index 319264ae274..213b192d441 100644
--- a/gcc/testsuite/g++.dg/cpp0x/initlist92.C
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist92.C
@@ -23,7 +23,7 @@ bool Test4(std::initializer_list<std::string>);
int main ()
  {
-  ( Test1({"false"}) );      // { dg-error "narrowing" "" { target c++2a } }
+  ( Test1({"false"}) );      // { dg-error "narrowing" }
    ( Test2({123}) );
    ( Test3({456}) );
    ( Test4({"false"}) );

base-commit: dbfba41e95d1d93b17e907b7f516b52ed3a3c415


Reply via email to