blob: ddd80025afc7ebce59a4323beb899104f26a8d1e [file] [log] [blame]
// { dg-do run }
// { dg-options "-std=c++2a -fcontracts -fcontract-continuation-mode=on" }
#include <cstdio>
struct S
{
template<typename T>
S(T a) [[ pre: a > 0 ]] [[ pre: a > 10 ]];
};
template<typename T>
S::S(T a)
{
printf ("S::S(T): %d\n", (int)a);
}
struct S1
{
template<typename T>
S1(T a) [[ pre: a > 0 ]] [[ pre: a > 10 ]]
{
printf ("S1::S1(T): %d\n", (int)a);
}
};
int main(int, char **) {
S s{-1};
S s2{-2.5};
S1 s1_1{-3};
S1 s1_2{-4.5};
return 0;
}
// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<int> .*(\n|\r\n|\r)*" }
// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<int> .*(\n|\r\n|\r)*" }
// { dg-output "S::S.T.: -1(\n|\r\n|\r)*" }
// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<double> .*(\n|\r\n|\r)*" }
// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<double> .*(\n|\r\n|\r)*" }
// { dg-output "S::S.T.: -2(\n|\r\n|\r)*" }
// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<int> .*(\n|\r\n|\r)*" }
// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<int> .*(\n|\r\n|\r)*" }
// { dg-output "S1::S1.T.: -3(\n|\r\n|\r)*" }
// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<double> .*(\n|\r\n|\r)*" }
// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<double> .*(\n|\r\n|\r)*" }
// { dg-output "S1::S1.T.: -4(\n|\r\n|\r)*" }