Viewing file: mvp.C (1.42 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// { dg-additional-options -Wparentheses }
// Most Vexing Parse warnings // in C++ anythig that syntactically looks like a decl IS a decl, this // can lead to confused users, but worse silent unexpectedly unsafe // code generation.
int (a); // { dg-warning "" } int (*b); // { dg-warning "" } extern int (&c); // { dg-warning "" }
int h1 = 0, h2 = 0; struct H { H(...);};
namespace fns { int (*a) (); int (b) (); int (*c ()) (); int (d1 ()); // { dg-warning "" } int (d2 // { dg-warning "" } ()); int (e) (int); int g (int (a)); // No warning because ... H h (int (h1), int (h2), 3); // ... not a function decl. }
namespace arys { int (*a)[1]; int (b)[1]; int (*c[1])[1]; int (d1[1]); // { dg-warning "" } int (d2 [1]); int (e[1])[1]; }
namespace complex { int (*a())[1]; int (*b[1])(); int ((*c1())[1]); // { dg-warning "" } int ((*c2()) [1]); int ((*d1[1])()); // { dg-warning "" } int ((*d2[1]) // { dg-warning "" } ()); }
namespace motivation { typedef int shared_mutex; // for exposition struct locker { locker (); locker (int &r); ~locker (); }; class protected_state { shared_mutex mutex; // not a real mutex type int state;
public: void not_thread_safe () { locker (mutex); // { dg-warning "" } state++; // oops } void thread_safe () { locker lock (mutex); state++; // ok; } }; }
|