On Monday, 5 November 2012 at 08:53:48 UTC, Johannes Pfau wrote:
Am Sun, 04 Nov 2012 16:48:26 +0100
schrieb "monarch_dodra" <[email protected]>:
I'm wondering if there is a way to know you are in deprecated
mode or not?
The deprecated attribute is great, because it gives a clear
compile error (as opposed to a static if, which just hides the
function completely).
But the attribute alone is not enough: I have a class with a
deprecated method, which consumes a book-keeping attribute:
Not only will this attribute exist even though it has become
useless, but the other functions will keep updating this
attribute, even though it has no more consumers.
What's more, I'd still want to unittest that function, but
obviously, only when compiled in "-unittest -d".
So I have a problem.
--------
Finding out if the compilation mode is deprecated is easy
enough:
//----
deprecated @property void deprecateExists(){}
enum deprecatedActive = is(typeof(deprecateExists));
//----
The thing is it's kind of dirty, and I wouldn't want to have
to copy paste this in all of my modules, just to know whether
or not deprecation is active...
--------
We've currently implemented "version(assert)" and
"version(debug)". Do you think we should request having a
"version(deprecated)"? I think it would be very helpful.
Thoughts?
As deprecated now allows optional messages some folks have
suggested to
make deprecated behave like in other languages: Warn if
something
deprecated is used, do not print warnings if compiling with
-deprecated.
This would conflict with your proposed usage of
version(deprecated).
Is that even possible? I mean, if I deprecate R.index, then what
is the value of isRandomAccessRange!R? If I call algorithm
"find(r1, r2);", then will I get a message I'm using a deprecated
branch?
Wouldn't the proposal be better served as:
-- : Deprecated stuff just can't be used
-d : You can use deprecated stuff, and you get no warning
whatsoever
-dw : You can use deprecated stuff, but are served with a warning
In that context, we'd keep a clear [w|w/o] deprecated, and my
proposal would not conflict either.