---
alias CHAR* LPCH, LPSTR, PCH, PSTR;
---
AliasDeclaration:
alias StorageClassesopt BasicType Declarator
alias AliasDeclarationX ;
AliasDeclarationX:
Identifier TemplateParametersopt = StorageClassesopt Type
AliasDeclarationX , Identifier TemplateParametersopt = StorageClassesopt Type
Obviously AliasDeclarationX doesn't match because there's no "=" token, so let's try the first rule. This doesn't match because Declarator doesn't allow commas and multiple identifiers.
Comment #1 by briancschott — 2014-08-17T02:41:10Z
Looking at the D1 documentation, you can find this:
AliasDeclaration:
alias Decl
Decl:
BasicType Declarators ;
Declarators:
DeclaratorInitializer , DeclaratorIdentifierList
DeclaratorInitializer:
Declarator
DeclaratorIdentifierList:
DeclaratorIdentifier
DeclaratorIdentifier , DeclaratorIdentifierList
DeclaratorIdentifier:
Identifier
It appears that DMD is accepting code that is valid in D1 but not valid in D2 without issuing any sort of deprecation warning or compiler error.