Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
October 18, 2013 Error: cannot call public/export function someFunction from invariant | ||||
---|---|---|---|---|
| ||||
See topic. Why is this not allowed? The function in question is not virtual. struct S { void someFunction() const {} const invariant() { someFunction(); } } void main() { S s; } |
October 18, 2013 Re: Error: cannot call public/export function someFunction from invariant | ||||
---|---|---|---|---|
| ||||
Posted in reply to simendsjo | simendsjo:
> See topic. Why is this not allowed? The function in question is not virtual.
>
> struct S {
> void someFunction() const {}
> const invariant() { someFunction(); }
> }
> void main() {
> S s;
> }
It being not virtual is not important. In what cases is invariant() called, simendsjo? I sense an infinite loop.
Bye,
bearophile
|
October 18, 2013 Re: Error: cannot call public/export function someFunction from invariant | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On Friday, October 18, 2013 11:04:25 bearophile wrote:
> simendsjo:
> > See topic. Why is this not allowed? The function in question is not virtual.
> >
> > struct S {
> >
> > void someFunction() const {}
> > const invariant() { someFunction(); }
> >
> > }
> > void main() {
> >
> > S s;
> >
> > }
>
> It being not virtual is not important. In what cases is invariant() called, simendsjo? I sense an infinite loop.
Yeah, it's probably because someFunction calls the invariant before and after it's called. If you want to call a member function from an invariant, it should be static, or it should be a free function.
- Jonathan M Davis
|
October 18, 2013 Re: Error: cannot call public/export function someFunction from invariant | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | On Friday, 18 October 2013 at 09:08:53 UTC, Jonathan M Davis wrote:
> On Friday, October 18, 2013 11:04:25 bearophile wrote:
>> simendsjo:
>> > See topic. Why is this not allowed? The function in question is
>> > not virtual.
>> >
>> > struct S {
>> >
>> > void someFunction() const {}
>> > const invariant() { someFunction(); }
>> >
>> > }
>> > void main() {
>> >
>> > S s;
>> >
>> > }
>>
>> It being not virtual is not important. In what cases is
>> invariant() called, simendsjo? I sense an infinite loop.
>
> Yeah, it's probably because someFunction calls the invariant before and after
> it's called. If you want to call a member function from an invariant, it
> should be static, or it should be a free function.
Ah, good point - stupid me :) I'll rather move some checking to pre/post contracts.
|
October 18, 2013 Re: Error: cannot call public/export function someFunction from invariant | ||||
---|---|---|---|---|
| ||||
On 10/18/13, Jonathan M Davis <jmdavisProg@gmx.com> wrote:
> If you want to call a member function from an invariant, it should be static, or it should be a free function.
I can also be private, the diagnostic is pretty clear about that. :)
|
Copyright © 1999-2021 by the D Language Foundation