--- /dev/null
+use strictures 1;
+use Test::More;
+use Test::Fatal;
+
+{
+ package RollyRole;
+
+ use Moo::Role;
+
+ has f => (is => 'ro', default => sub { 0 });
+}
+
+{
+ package ClassyClass;
+
+ use Moo;
+
+ has f => (is => 'ro', default => sub { 1 });
+}
+
+{
+ package UsesTheRole;
+
+ use Moo;
+
+ with 'RollyRole';
+}
+
+{
+ package UsesTheRole2;
+
+ use Moo;
+
+ with 'RollyRole';
+
+ has '+f' => (default => sub { 2 });
+}
+
+{
+
+ package ExtendsTheClass;
+
+ use Moo;
+
+ extends 'ClassyClass';
+
+ has '+f' => (default => sub { 3 });
+}
+
+{
+ package BlowsUp;
+
+ use Moo;
+
+ ::like(::exception { has '+f' => () }, qr/\Qhas '+f'/, 'Kaboom');
+}
+
+is(UsesTheRole->new->f, 0, 'role attr');
+is(ClassyClass->new->f, 1, 'class attr');
+is(UsesTheRole2->new->f, 2, 'role attr with +');
+is(ExtendsTheClass->new->f, 3, 'class attr with +');
+
+done_testing;