1// { dg-do assemble } 2// Copyright (C) 1999 Free Software Foundation, Inc. 3// Contributed by Nathan Sidwell 12 Dec 1999 <nathan@acm.org> 4 5// static_cast should not cast _away_ constness ([expr.static.cast]/6), 6// but nothing bans _adding_ constness. [expr.static.cast]/10 states that a 7// pointer of type cv void can be cast to pointer to object type. 8 9struct X; 10struct Y {}; 11struct Z : Y {}; 12 13void fn (void *p, void const *cp, Y *yp, Y const *ycp, Z *zp, Z const *zcp) 14{ 15 static_cast <X *> (p); 16 static_cast <X const *> (p); 17 static_cast <int *> (p); 18 static_cast <int const *> (p); 19 static_cast <int **> (p); 20 static_cast <int const **> (p); 21 static_cast <int *const *> (p); 22 static_cast <int const *const *> (p); 23 24 static_cast <X *> (cp); // { dg-error "" } lose const 25 static_cast <X const *> (cp); 26 static_cast <int *> (cp); // { dg-error "" } lose const 27 static_cast <int const *> (cp); 28 static_cast <int **> (cp); // { dg-error "" } lose const 29 static_cast <int const **> (cp); // { dg-error "" } lose const 30 static_cast <int *const *> (cp); 31 static_cast <int const *const *> (cp); 32 33 static_cast <Z *> (yp); 34 static_cast <Z const *> (yp); 35 36 static_cast <Z *> (ycp); // { dg-error "" } lose const 37 static_cast <Z const *> (ycp); 38 39 static_cast <Y *> (zp); 40 static_cast <Y const *> (zp); 41 42 static_cast <Y *> (zcp); // { dg-error "" } lose const 43 static_cast <Y const *> (zcp); 44} 45