1 // ensure that that preconditions can access public, protected, and private
2 // members of the current and base classes
4 // { dg-options "-std=c++2a -fcontracts -fcontract-continuation-mode=on" }
15 return pub * pro * pri;
53 return B::pub * B::pro;
64 struct PubChild : PubBase
83 return B::pub * B::pro;
98 TChild<Base> tchild{};
104 TPubChild<PubBase> tpubchild;
110 // { dg-skip-if "requires hosted libstdc++ for stdc++exp" { ! hostedlib } }
111 // { dg-output "contract violation in function Base::b at .*.C:11: .*(\n|\r\n|\r)" }
112 // { dg-output "contract violation in function Base::b at .*.C:12: .*(\n|\r\n|\r)" }
113 // { dg-output "contract violation in function Base::b at .*.C:13: .*(\n|\r\n|\r)" }
114 // { dg-output "contract violation in function Child::fun at .*.C:26: .*(\n|\r\n|\r)" }
115 // { dg-output "contract violation in function Child::fun at .*.C:27: .*(\n|\r\n|\r)" }
116 // { dg-output "contract violation in function Child::fun at .*.C:28: .*(\n|\r\n|\r)" }
117 // { dg-output "contract violation in function VChild::b at .*.C:37: .*(\n|\r\n|\r)" }
118 // { dg-output "contract violation in function VChild::b at .*.C:38: .*(\n|\r\n|\r)" }
119 // { dg-output "contract violation in function VChild::b at .*.C:39: .*(\n|\r\n|\r)" }
120 // { dg-output "contract violation in function TChild<Base>::fun at .*.C:49: .*(\n|\r\n|\r)" }
121 // { dg-output "contract violation in function TChild<Base>::fun at .*.C:50: .*(\n|\r\n|\r)" }
122 // { dg-output "contract violation in function TChild<Base>::fun at .*.C:51: .*(\n|\r\n|\r)" }
123 // { dg-output "contract violation in function PubChild::fun at .*.C:67: .*(\n|\r\n|\r)" }
124 // { dg-output "contract violation in function PubChild::fun at .*.C:68: .*(\n|\r\n|\r)" }
125 // { dg-output "contract violation in function PubChild::fun at .*.C:69: .*(\n|\r\n|\r)" }
126 // { dg-output "contract violation in function TPubChild<PubBase>::fun at .*.C:79: .*(\n|\r\n|\r)" }
127 // { dg-output "contract violation in function TPubChild<PubBase>::fun at .*.C:80: .*(\n|\r\n|\r)" }
128 // { dg-output "contract violation in function TPubChild<PubBase>::fun at .*.C:81: .*(\n|\r\n|\r)" }