# Feature tests for optional const and optional new

This directory was created in order to hold tests pertaining to the
Dart feature that allows the `new` and `const` keywords on instance
creation expressions and composite literals (maps and lists) to be
omitted. For more details, please check the feature specifications
on
[optional const](https://github.com/dart-lang/sdk/blob/master/docs/language/informal/optional-const.md)
and on
[optional new](https://github.com/dart-lang/sdk/blob/master/docs/language/informal/optional-new.md).