re PR c++/57068 (gcc prints warning "ref-qualifiers only available with -std=c++0x...
authorJason Merrill <jason@redhat.com>
Thu, 9 May 2013 03:57:53 +0000 (23:57 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 9 May 2013 03:57:53 +0000 (23:57 -0400)
PR c++/57068
* decl.c (grokdeclarator): Warn about ref-qualifiers here.
* parser.c (cp_parser_ref_qualifier_seq_opt): Not here.
* error.c (maybe_warn_cpp0x): s/0x/11/.

From-SVN: r198730

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/error.c
gcc/cp/parser.c
gcc/testsuite/g++.dg/parse/ref-qual1.C [new file with mode: 0644]

index b9e7e61..560b463 100644 (file)
@@ -1,3 +1,10 @@
+2013-05-08  Jason Merrill  <jason@redhat.com>
+
+       PR c++/57068
+       * decl.c (grokdeclarator): Warn about ref-qualifiers here.
+       * parser.c (cp_parser_ref_qualifier_seq_opt): Not here.
+       * error.c (maybe_warn_cpp0x): s/0x/11/.
+
 2013-05-08  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/51226
index 12703d5..d6e2861 100644 (file)
@@ -9563,6 +9563,7 @@ grokdeclarator (const cp_declarator *declarator,
 
                if (rqual)
                  {
+                   maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
                    error ((flags == DTOR_FLAG)
                           ? "destructors may not be ref-qualified"
                           : "constructors may not be ref-qualified");
index c57a5aa..bd463ea 100644 (file)
@@ -3394,7 +3394,7 @@ maybe_warn_cpp0x (cpp0x_warn_str str)
        break;
       case CPP0X_AUTO:
        pedwarn (input_location, 0,
-                "C++0x auto only available with -std=c++11 or -std=gnu++11");
+                "C++11 auto only available with -std=c++11 or -std=gnu++11");
        break;
       case CPP0X_SCOPED_ENUMS:
        pedwarn (input_location, 0,
@@ -3443,7 +3443,7 @@ maybe_warn_cpp0x (cpp0x_warn_str str)
       case CPP0X_REF_QUALIFIER:
        pedwarn (input_location, 0,
                 "ref-qualifiers "
-                "only available with -std=c++0x or -std=gnu++0x");
+                "only available with -std=c++11 or -std=gnu++11");
        break;
       default:
        gcc_unreachable ();
index 6de8e1a..8d3f6c7 100644 (file)
@@ -17199,9 +17199,6 @@ cp_parser_ref_qualifier_opt (cp_parser* parser)
        }
     }
 
-  if (ref_qual)
-    maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
-
   return ref_qual;
 }
 
diff --git a/gcc/testsuite/g++.dg/parse/ref-qual1.C b/gcc/testsuite/g++.dg/parse/ref-qual1.C
new file mode 100644 (file)
index 0000000..e3f60c0
--- /dev/null
@@ -0,0 +1,29 @@
+// PR c++/57068
+
+enum Enums {
+  Enum1 = 0x00000000,
+  Enum2 = 0x00000001
+};
+
+class Flags {
+public:
+  Flags() : i(0) {}
+  Flags(int i): i(i) {}
+  Flags operator&(Enums f) { return Flags(Enums(i & f)); }
+
+  operator bool() { return i; }
+private:
+  int i;
+};
+
+Flags windowState()
+{
+  return Flags();
+}
+
+int main()
+{
+  if (bool(windowState() & Enum1) == true)
+    return 1;
+  return 0;
+}