www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How to deprecate member function from outside?

reply Dru <Dru notreal.com> writes:
Hi,
I would like to use "deprecated" on a member function, but do it 
from a separate file

this works:
///
void func() {}

deprecated {
   void func();
}
////

this doesn't work:
////
class C{
   void func() {}
}

deprecated {
   void C.func();
}
////

I get: Error: semicolon expected, not .

Thanks
Dec 22 2018
parent reply Neia Neutuladh <neia ikeran.org> writes:
On Sat, 22 Dec 2018 18:55:47 +0000, Dru wrote:
 I would like to use "deprecated" on a member function, but do it from a
 separate file
 
 this works:
 ///
 void func() {}
 
 deprecated {
    void func();
 }
You're defining two functions, presumably in two different modules and with two different fully qualified names. One function is deprecated but has no body, so you will get a deprecation warning and a linker error if you try using it. One function is not deprecated and has a body, so you'll get no errors if you try using it. If, on the other hand, you define both the non-deprecated and deprecated functions in the same file, and you try using them, you'll get an error saying that the function call matches multiple functions.
Dec 22 2018
parent reply Dru <Dru notreal.com> writes:
Thanks for the reply
I will try to explain what I mean:

The first example shows that it is possible to deprecate a 
function separately from it's definition.

The second example tries the same for a member function but it 
fails with a compile error.


I want to know if it is possible to "fix" the second example?
(deprecate a member function separately from it's definition)
Dec 22 2018
parent reply Neia Neutuladh <neia ikeran.org> writes:
On Sat, 22 Dec 2018 21:33:14 +0000, Dru wrote:
 The first example shows that it is possible to deprecate a function
 separately from it's definition.
No, it doesn't. You declared two *different* functions. One was deprecated; the other wasn't.
 I want to know if it is possible to "fix" the second example? (deprecate
 a member function separately from it's definition)
No. All functions must be deprecated where you declare them.
Dec 22 2018
parent Dru <Dru notreal.com> writes:
You're right it did define two functions
same signature and no compile error, heh
Dec 22 2018