On 5/30/20 3:00 AM, Mike Parker wrote:
The following declarations now give a deprecation warning:
```d
struct ErrorInfo {
private:
char[32] _error;
char[96] _message;
public @nogc nothrow @property:
/**
Returns the string "Missing Symbol" to indicate a symbol load
failure, and
the name of a library to indicate a library load failure.
*/
const(char)* error() const { return _error.ptr; }
/**
Returns a symbol name for symbol load failures, and a
system-specific error
message for library load failures.
*/
const(char)* message() const { return _message.ptr; }
}
```
I find it rather annoying, as I'm returning `const(char)*` and not
`char*`, but it is what it is. My question is, if I add `return` to the
function declarations, will this compile all the way back to DMD 2.067
*without* `-preview=dip25`? It works on 2.091.0. I always assumed a
preview feature's syntax wasn't supported without the preview switch.
I had to run the code to see the warning to understand what you meant.
Here is the warning:
onlineapp.d(11): Deprecation: returning &this._error escapes a reference
to parameter this, perhaps annotate with return
onlineapp.d(17): Deprecation: returning &this._message escapes a
reference to parameter this, perhaps annotate with return
This is not about const or not, it's about lifetime management.
For example, this would return a pointer to a stack frame that is about
to go away:
const(char)* foo()
{
ErrorInfo info;
return info.message;
}
I know that you have already fixed the problem, but I wanted to make
sure you understood why the compiler is complaining.
-Steve