https://issues.dlang.org/show_bug.cgi?id=15049
Issue ID: 15049
Summary: bad error message when trying to instantiate a nested
class in a static method
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Keywords: diagnostic
Severity: normal
Priority: P1
Component: dmd
Assignee: [email protected]
Reporter: [email protected]
Found by Prudence, reduced by Ali Çehreli and myself:
http://forum.dlang.org/post/[email protected]
The following code is invalid, but the error message should be improved:
----
class MyStore
{
class SingleStore
{
static void New()
{
new SingleStore(); /* line 7 */
}
}
}
----
test.d(7): Error: type SingleStore is not an expression
----
SingleStore is a nested class. That means, instances of it are bound to MyStore
instances. But New is static, so it doesn't have a MyStore to which it could
attach the `new SingleStore`.
When moving New to MyStore the error gets better:
----
class MyStore
{
class SingleStore
{
}
static void New()
{
new SingleStore(); /* line 8 */
}
}
----
test.d(8): Error: 'this' is only defined in non-static member functions, not
New
test.d(8): Error: 'this' for nested class must be a class type, not _error_
----
That's still a bit stilted, but a lot better than the other one.
--