Changes 3242
LICENSE 11
MANIFEST 2456
META.json 608866
META.yml 544715
Makefile.PL 2436
README.md 13
TODO 250
author/convert-to-test-fatal 1280
author/docGenerator.pl 22
author/extract-inline-tests 45
benchmarks/caf_vs_moose.pl 20
benchmarks/cmop/all.yml 10
benchmarks/cmop/lib/Plain/Point.pm 10
benchmarks/cmop/lib/Plain/Point3D.pm 10
benchmarks/cmop/run_yml.pl 20
benchmarks/immutable.pl 10
benchmarks/lotsa-classes.pl 10
benchmarks/method_modifiers.pl 10
benchmarks/moose_bench.pl 32
benchmarks/type_constraints2.pl 10
bin/moose-outdated 02
dist.ini 62160
inc/CheckAuthorDeps.pm 052
inc/CheckReleaseType.pm 037
inc/Clean.pm 100
inc/ExtractInlineTests.pm 30
inc/GenerateDocs.pm 56
inc/GitUpToDate.pm 014
inc/MMHelper.pm 20
inc/MyInline.pm 112
inc/RequireAuthorDeps.pm 270
inc/SimpleAuthority.pm 013
inc/SimpleProvides.pm 034
lib/Class/MOP/Attribute.pm 1711
lib/Class/MOP/Class/Immutable/Trait.pm 1113
lib/Class/MOP/Class.pm 5259
lib/Class/MOP/Deprecated.pm 52
lib/Class/MOP/Instance.pm 62
lib/Class/MOP/Method/Accessor.pm 2417
lib/Class/MOP/Method/Constructor.pm 115
lib/Class/MOP/Method/Generated.pm 104
lib/Class/MOP/Method/Inlined.pm 63
lib/Class/MOP/Method/Meta.pm 83
lib/Class/MOP/Method/Overload.pm 1440
lib/Class/MOP/Method/Wrapped.pm 93
lib/Class/MOP/Method.pm 105
lib/Class/MOP/MiniTrait.pm 53
lib/Class/MOP/Mixin/AttributeCore.pm 52
lib/Class/MOP/Mixin/HasAttributes.pm 127
lib/Class/MOP/Mixin/HasMethods.pm 10810
lib/Class/MOP/Mixin/HasOverloads.pm 0236
lib/Class/MOP/Mixin.pm 815
lib/Class/MOP/Module.pm 125
lib/Class/MOP/Object.pm 199
lib/Class/MOP/Overload.pm 0341
lib/Class/MOP/Package.pm 125
lib/Class/MOP.pm 1162
lib/Moose/Conflicts.pm 7133
lib/Moose/Cookbook/Basics/BankAccount_MethodModifiersAndSubclassing.pod 52
lib/Moose/Cookbook/Basics/BinaryTree_AttributeFeatures.pod 52
lib/Moose/Cookbook/Basics/BinaryTree_BuilderAndLazyBuild.pod 52
lib/Moose/Cookbook/Basics/Company_Subtypes.pod 52
lib/Moose/Cookbook/Basics/DateTime_ExtendingNonMooseParent.pod 52
lib/Moose/Cookbook/Basics/Document_AugmentAndInner.pod 52
lib/Moose/Cookbook/Basics/Genome_OverloadingSubtypesAndCoercion.pod 52
lib/Moose/Cookbook/Basics/HTTP_SubtypesAndCoercion.pod 52
lib/Moose/Cookbook/Basics/Immutable.pod 52
lib/Moose/Cookbook/Basics/Person_BUILDARGSAndBUILD.pod 52
lib/Moose/Cookbook/Basics/Point_AttributesAndSubclassing.pod 52
lib/Moose/Cookbook/Extending/Debugging_BaseClassRole.pod 83
lib/Moose/Cookbook/Extending/ExtensionOverview.pod 52
lib/Moose/Cookbook/Extending/Mooseish_MooseSugar.pod 52
lib/Moose/Cookbook/Legacy/Debugging_BaseClassReplacement.pod 83
lib/Moose/Cookbook/Legacy/Labeled_AttributeMetaclass.pod 63
lib/Moose/Cookbook/Legacy/Table_ClassMetaclass.pod 63
lib/Moose/Cookbook/Meta/GlobRef_InstanceMetaclass.pod 52
lib/Moose/Cookbook/Meta/Labeled_AttributeTrait.pod 52
lib/Moose/Cookbook/Meta/PrivateOrPublic_MethodMetaclass.pod 52
lib/Moose/Cookbook/Meta/Table_MetaclassTrait.pod 52
lib/Moose/Cookbook/Meta/WhyMeta.pod 52
lib/Moose/Cookbook/Roles/ApplicationToInstance.pod 52
lib/Moose/Cookbook/Roles/Comparable_CodeReuse.pod 52
lib/Moose/Cookbook/Roles/Restartable_AdvancedComposition.pod 52
lib/Moose/Cookbook/Snack/Keywords.pod 54
lib/Moose/Cookbook/Snack/Types.pod 52
lib/Moose/Cookbook/Style.pod 52
lib/Moose/Cookbook.pod 52
lib/Moose/Deprecated.pm 52
lib/Moose/Exception/AccessorMustReadWrite.pm 41
lib/Moose/Exception/AddParameterizableTypeTakesParameterizableType.pm 41
lib/Moose/Exception/AddRoleTakesAMooseMetaRoleInstance.pm 41
lib/Moose/Exception/AddRoleToARoleTakesAMooseMetaRole.pm 41
lib/Moose/Exception/ApplyTakesABlessedInstance.pm 41
lib/Moose/Exception/AttachToClassNeedsAClassMOPClassInstanceOrASubclass.pm 41
lib/Moose/Exception/AttributeConflictInRoles.pm 1110
lib/Moose/Exception/AttributeConflictInSummation.pm 85
lib/Moose/Exception/AttributeExtensionIsNotSupportedInRoles.pm 41
lib/Moose/Exception/AttributeIsRequired.pm 847
lib/Moose/Exception/AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass.pm 41
lib/Moose/Exception/AttributeNamesDoNotMatch.pm 41
lib/Moose/Exception/AttributeValueIsNotAnObject.pm 41
lib/Moose/Exception/AttributeValueIsNotDefined.pm 41
lib/Moose/Exception/AutoDeRefNeedsArrayRefOrHashRef.pm 41
lib/Moose/Exception/BadOptionFormat.pm 41
lib/Moose/Exception/BothBuilderAndDefaultAreNotAllowed.pm 41
lib/Moose/Exception/BuilderDoesNotExist.pm 41
lib/Moose/Exception/BuilderMethodNotSupportedForAttribute.pm 41
lib/Moose/Exception/BuilderMethodNotSupportedForInlineAttribute.pm 41
lib/Moose/Exception/BuilderMustBeAMethodName.pm 41
lib/Moose/Exception/CallingMethodOnAnImmutableInstance.pm 41
lib/Moose/Exception/CallingReadOnlyMethodOnAnImmutableInstance.pm 41
lib/Moose/Exception/CanExtendOnlyClasses.pm 125
lib/Moose/Exception/CanOnlyConsumeRole.pm 41
lib/Moose/Exception/CanOnlyWrapBlessedCode.pm 41
lib/Moose/Exception/CanReblessOnlyIntoASubclass.pm 75
lib/Moose/Exception/CanReblessOnlyIntoASuperclass.pm 63
lib/Moose/Exception/CannotAddAdditionalTypeCoercionsToUnion.pm 41
lib/Moose/Exception/CannotAddAsAnAttributeToARole.pm 41
lib/Moose/Exception/CannotApplyBaseClassRolesToRole.pm 41
lib/Moose/Exception/CannotAssignValueToReadOnlyAccessor.pm 41
lib/Moose/Exception/CannotAugmentIfLocalMethodPresent.pm 41
lib/Moose/Exception/CannotAugmentNoSuperMethod.pm 41
lib/Moose/Exception/CannotAutoDerefWithoutIsa.pm 41
lib/Moose/Exception/CannotAutoDereferenceTypeConstraint.pm 41
lib/Moose/Exception/CannotCalculateNativeType.pm 41
lib/Moose/Exception/CannotCallAnAbstractBaseMethod.pm 41
lib/Moose/Exception/CannotCallAnAbstractMethod.pm 41
lib/Moose/Exception/CannotCoerceAWeakRef.pm 41
lib/Moose/Exception/CannotCoerceAttributeWhichHasNoCoercion.pm 41
lib/Moose/Exception/CannotCreateHigherOrderTypeWithoutATypeParameter.pm 41
lib/Moose/Exception/CannotCreateMethodAliasLocalMethodIsPresent.pm 63
lib/Moose/Exception/CannotCreateMethodAliasLocalMethodIsPresentInClass.pm 41
lib/Moose/Exception/CannotDelegateLocalMethodIsPresent.pm 41
lib/Moose/Exception/CannotDelegateWithoutIsa.pm 41
lib/Moose/Exception/CannotFindDelegateMetaclass.pm 41
lib/Moose/Exception/CannotFindType.pm 41
lib/Moose/Exception/CannotFindTypeGivenToMatchOnType.pm 41
lib/Moose/Exception/CannotFixMetaclassCompatibility.pm 41
lib/Moose/Exception/CannotGenerateInlineConstraint.pm 98
lib/Moose/Exception/CannotInitializeMooseMetaRoleComposite.pm 41
lib/Moose/Exception/CannotInlineTypeConstraintCheck.pm 41
lib/Moose/Exception/CannotLocatePackageInINC.pm 58
lib/Moose/Exception/CannotMakeMetaclassCompatible.pm 41
lib/Moose/Exception/CannotOverrideALocalMethod.pm 41
lib/Moose/Exception/CannotOverrideBodyOfMetaMethods.pm 41
lib/Moose/Exception/CannotOverrideLocalMethodIsPresent.pm 41
lib/Moose/Exception/CannotOverrideNoSuperMethod.pm 41
lib/Moose/Exception/CannotRegisterUnnamedTypeConstraint.pm 51
lib/Moose/Exception/CannotUseLazyBuildAndDefaultSimultaneously.pm 41
lib/Moose/Exception/CircularReferenceInAlso.pm 41
lib/Moose/Exception/ClassDoesNotHaveInitMeta.pm 41
lib/Moose/Exception/ClassDoesTheExcludedRole.pm 87
lib/Moose/Exception/ClassNamesDoNotMatch.pm 41
lib/Moose/Exception/CloneObjectExpectsAnInstanceOfMetaclass.pm 52
lib/Moose/Exception/CodeBlockMustBeACodeRef.pm 41
lib/Moose/Exception/CoercingWithoutCoercions.pm 102
lib/Moose/Exception/CoercionAlreadyExists.pm 41
lib/Moose/Exception/CoercionNeedsTypeConstraint.pm 41
lib/Moose/Exception/ConflictDetectedInCheckRoleExclusions.pm 87
lib/Moose/Exception/ConflictDetectedInCheckRoleExclusionsInToClass.pm 65
lib/Moose/Exception/ConstructClassInstanceTakesPackageName.pm 41
lib/Moose/Exception/CouldNotCreateMethod.pm 41
lib/Moose/Exception/CouldNotCreateWriter.pm 41
lib/Moose/Exception/CouldNotEvalConstructor.pm 41
lib/Moose/Exception/CouldNotEvalDestructor.pm 41
lib/Moose/Exception/CouldNotFindTypeConstraintToCoerceFrom.pm 41
lib/Moose/Exception/CouldNotGenerateInlineAttributeMethod.pm 41
lib/Moose/Exception/CouldNotLocateTypeConstraintForUnion.pm 41
lib/Moose/Exception/CouldNotParseType.pm 41
lib/Moose/Exception/CreateMOPClassTakesArrayRefOfAttributes.pm 41
lib/Moose/Exception/CreateMOPClassTakesArrayRefOfSuperclasses.pm 41
lib/Moose/Exception/CreateMOPClassTakesHashRefOfMethods.pm 41
lib/Moose/Exception/CreateTakesArrayRefOfRoles.pm 51
lib/Moose/Exception/CreateTakesHashRefOfAttributes.pm 41
lib/Moose/Exception/CreateTakesHashRefOfMethods.pm 41
lib/Moose/Exception/DefaultToMatchOnTypeMustBeCodeRef.pm 41
lib/Moose/Exception/DelegationToAClassWhichIsNotLoaded.pm 41
lib/Moose/Exception/DelegationToARoleWhichIsNotLoaded.pm 41
lib/Moose/Exception/DelegationToATypeWhichIsNotAClass.pm 41
lib/Moose/Exception/DoesRequiresRoleName.pm 102
lib/Moose/Exception/EnumCalledWithAnArrayRefAndAdditionalArgs.pm 41
lib/Moose/Exception/EnumValuesMustBeString.pm 41
lib/Moose/Exception/ExtendsMissingArgs.pm 41
lib/Moose/Exception/HandlesMustBeAHashRef.pm 41
lib/Moose/Exception/IllegalInheritedOptions.pm 41
lib/Moose/Exception/IllegalMethodTypeToAddMethodModifier.pm 41
lib/Moose/Exception/IncompatibleMetaclassOfSuperclass.pm 128
lib/Moose/Exception/InitMetaRequiresClass.pm 41
lib/Moose/Exception/InitializeTakesUnBlessedPackageName.pm 41
lib/Moose/Exception/InstanceBlessedIntoWrongClass.pm 52
lib/Moose/Exception/InstanceMustBeABlessedReference.pm 41
lib/Moose/Exception/InvalidArgPassedToMooseUtilMetaRole.pm 41
lib/Moose/Exception/InvalidArgumentToMethod.pm 41
lib/Moose/Exception/InvalidArgumentsToTraitAliases.pm 41
lib/Moose/Exception/InvalidBaseTypeGivenToCreateParameterizedTypeConstraint.pm 41
lib/Moose/Exception/InvalidHandleValue.pm 41
lib/Moose/Exception/InvalidHasProvidedInARole.pm 41
lib/Moose/Exception/InvalidNameForType.pm 41
lib/Moose/Exception/InvalidOverloadOperator.pm 019
lib/Moose/Exception/InvalidRoleApplication.pm 41
lib/Moose/Exception/InvalidTypeConstraint.pm 41
lib/Moose/Exception/InvalidTypeGivenToCreateParameterizedTypeConstraint.pm 41
lib/Moose/Exception/InvalidValueForIs.pm 41
lib/Moose/Exception/IsaDoesNotDoTheRole.pm 41
lib/Moose/Exception/IsaLacksDoesMethod.pm 41
lib/Moose/Exception/LazyAttributeNeedsADefault.pm 41
lib/Moose/Exception/Legacy.pm 41
lib/Moose/Exception/MOPAttributeNewNeedsAttributeName.pm 41
lib/Moose/Exception/MatchActionMustBeACodeRef.pm 113
lib/Moose/Exception/MessageParameterMustBeCodeRef.pm 41
lib/Moose/Exception/MetaclassIsAClassNotASubclassOfGivenMetaclass.pm 66
lib/Moose/Exception/MetaclassIsARoleNotASubclassOfGivenMetaclass.pm 68
lib/Moose/Exception/MetaclassIsNotASubclassOfGivenMetaclass.pm 55
lib/Moose/Exception/MetaclassMustBeASubclassOfMooseMetaClass.pm 41
lib/Moose/Exception/MetaclassMustBeASubclassOfMooseMetaRole.pm 41
lib/Moose/Exception/MetaclassMustBeDerivedFromClassMOPClass.pm 41
lib/Moose/Exception/MetaclassNotLoaded.pm 41
lib/Moose/Exception/MetaclassTypeIncompatible.pm 56
lib/Moose/Exception/MethodExpectedAMetaclassObject.pm 41
lib/Moose/Exception/MethodExpectsFewerArgs.pm 41
lib/Moose/Exception/MethodExpectsMoreArgs.pm 41
lib/Moose/Exception/MethodModifierNeedsMethodName.pm 41
lib/Moose/Exception/MethodNameConflictInRoles.pm 41
lib/Moose/Exception/MethodNameNotFoundInInheritanceHierarchy.pm 52
lib/Moose/Exception/MethodNameNotGiven.pm 41
lib/Moose/Exception/MustDefineAMethodName.pm 41
lib/Moose/Exception/MustDefineAnAttributeName.pm 41
lib/Moose/Exception/MustDefineAnOverloadOperator.pm 011
lib/Moose/Exception/MustHaveAtLeastOneValueToEnumerate.pm 41
lib/Moose/Exception/MustPassAHashOfOptions.pm 41
lib/Moose/Exception/MustPassAMooseMetaRoleInstanceOrSubclass.pm 41
lib/Moose/Exception/MustPassAPackageNameOrAnExistingClassMOPPackageInstance.pm 41
lib/Moose/Exception/MustPassEvenNumberOfArguments.pm 41
lib/Moose/Exception/MustPassEvenNumberOfAttributeOptions.pm 41
lib/Moose/Exception/MustProvideANameForTheAttribute.pm 41
lib/Moose/Exception/MustSpecifyAtleastOneMethod.pm 41
lib/Moose/Exception/MustSpecifyAtleastOneRole.pm 41
lib/Moose/Exception/MustSpecifyAtleastOneRoleToApplicant.pm 41
lib/Moose/Exception/MustSupplyAClassMOPAttributeInstance.pm 41
lib/Moose/Exception/MustSupplyADelegateToMethod.pm 41
lib/Moose/Exception/MustSupplyAMetaclass.pm 41
lib/Moose/Exception/MustSupplyAMooseMetaAttributeInstance.pm 41
lib/Moose/Exception/MustSupplyAnAccessorTypeToConstructWith.pm 41
lib/Moose/Exception/MustSupplyAnAttributeToConstructWith.pm 41
lib/Moose/Exception/MustSupplyArrayRefAsCurriedArguments.pm 41
lib/Moose/Exception/MustSupplyPackageNameAndName.pm 41
lib/Moose/Exception/NeedsTypeConstraintUnionForTypeCoercionUnion.pm 54
lib/Moose/Exception/NeitherAttributeNorAttributeNameIsGiven.pm 41
lib/Moose/Exception/NeitherClassNorClassNameIsGiven.pm 41
lib/Moose/Exception/NeitherRoleNorRoleNameIsGiven.pm 41
lib/Moose/Exception/NeitherTypeNorTypeNameIsGiven.pm 41
lib/Moose/Exception/NoAttributeFoundInSuperClass.pm 52
lib/Moose/Exception/NoBodyToInitializeInAnAbstractBaseClass.pm 41
lib/Moose/Exception/NoCasesMatched.pm 41
lib/Moose/Exception/NoConstraintCheckForTypeConstraint.pm 41
lib/Moose/Exception/NoDestructorClassSpecified.pm 41
lib/Moose/Exception/NoImmutableTraitSpecifiedForClass.pm 66
lib/Moose/Exception/NoParentGivenToSubtype.pm 41
lib/Moose/Exception/OnlyInstancesCanBeCloned.pm 41
lib/Moose/Exception/OperatorIsRequired.pm 41
lib/Moose/Exception/OverloadConflictInSummation.pm 060
lib/Moose/Exception/OverloadRequiresAMetaClass.pm 011
lib/Moose/Exception/OverloadRequiresAMetaMethod.pm 011
lib/Moose/Exception/OverloadRequiresAMetaOverload.pm 011
lib/Moose/Exception/OverloadRequiresAMethodNameOrCoderef.pm 011
lib/Moose/Exception/OverloadRequiresAnOperator.pm 011
lib/Moose/Exception/OverloadRequiresNamesForCoderef.pm 011
lib/Moose/Exception/OverrideConflictInComposition.pm 96
lib/Moose/Exception/OverrideConflictInSummation.pm 1314
lib/Moose/Exception/PackageDoesNotUseMooseExporter.pm 41
lib/Moose/Exception/PackageNameAndNameParamsNotGivenToWrap.pm 41
lib/Moose/Exception/PackagesAndModulesAreNotCachable.pm 41
lib/Moose/Exception/ParameterIsNotSubtypeOfParent.pm 55
lib/Moose/Exception/ReferencesAreNotAllowedAsDefault.pm 41
lib/Moose/Exception/RequiredAttributeLacksInitialization.pm 41
lib/Moose/Exception/RequiredAttributeNeedsADefault.pm 41
lib/Moose/Exception/RequiredMethodsImportedByClass.pm 52
lib/Moose/Exception/RequiredMethodsNotImplementedByClass.pm 41
lib/Moose/Exception/Role/Attribute.pm 41
lib/Moose/Exception/Role/AttributeName.pm 41
lib/Moose/Exception/Role/Class.pm 506
lib/Moose/Exception/Role/EitherAttributeOrAttributeName.pm 41
lib/Moose/Exception/Role/Instance.pm 41
lib/Moose/Exception/Role/InstanceClass.pm 011
lib/Moose/Exception/Role/InvalidAttributeOptions.pm 41
lib/Moose/Exception/Role/Method.pm 41
lib/Moose/Exception/Role/ParamsHash.pm 41
lib/Moose/Exception/Role/Role.pm 458
lib/Moose/Exception/Role/RoleForCreate.pm 51
lib/Moose/Exception/Role/RoleForCreateMOPClass.pm 51
lib/Moose/Exception/Role/TypeConstraint.pm 466
lib/Moose/Exception/RoleDoesTheExcludedRole.pm 109
lib/Moose/Exception/RoleExclusionConflict.pm 41
lib/Moose/Exception/RoleNameRequired.pm 41
lib/Moose/Exception/RoleNameRequiredForMooseMetaRole.pm 41
lib/Moose/Exception/RoleNamesDoNotMatch.pm 260
lib/Moose/Exception/RolesDoNotSupportAugment.pm 41
lib/Moose/Exception/RolesDoNotSupportExtends.pm 41
lib/Moose/Exception/RolesDoNotSupportInner.pm 41
lib/Moose/Exception/RolesDoNotSupportRegexReferencesForMethodModifiers.pm 41
lib/Moose/Exception/RolesInCreateTakesAnArrayRef.pm 41
lib/Moose/Exception/RolesListMustBeInstancesOfMooseMetaRole.pm 41
lib/Moose/Exception/SingleParamsToNewMustBeHashRef.pm 41
lib/Moose/Exception/TriggerMustBeACodeRef.pm 41
lib/Moose/Exception/TypeConstraintCannotBeUsedForAParameterizableType.pm 714
lib/Moose/Exception/TypeConstraintIsAlreadyCreated.pm 69
lib/Moose/Exception/TypeNamesDoNotMatch.pm 260
lib/Moose/Exception/TypeParameterMustBeMooseMetaType.pm 41
lib/Moose/Exception/UnableToCanonicalizeHandles.pm 41
lib/Moose/Exception/UnableToCanonicalizeNonRolePackage.pm 41
lib/Moose/Exception/UnableToRecognizeDelegateMetaclass.pm 41
lib/Moose/Exception/UndefinedHashKeysPassedToMethod.pm 41
lib/Moose/Exception/UnionCalledWithAnArrayRefAndAdditionalArgs.pm 41
lib/Moose/Exception/UnionTakesAtleastTwoTypeNames.pm 41
lib/Moose/Exception/ValidationFailedForInlineTypeConstraint.pm 41
lib/Moose/Exception/ValidationFailedForTypeConstraint.pm 41
lib/Moose/Exception/WrapTakesACodeRefToBless.pm 41
lib/Moose/Exception/WrongTypeConstraintGiven.pm 41
lib/Moose/Exception.pm 2778
lib/Moose/Exporter.pm 821
lib/Moose/Intro.pod 52
lib/Moose/Manual/Attributes.pod 52
lib/Moose/Manual/BestPractices.pod 52
lib/Moose/Manual/Classes.pod 52
lib/Moose/Manual/Concepts.pod 52
lib/Moose/Manual/Construction.pod 52
lib/Moose/Manual/Contributing.pod 52
lib/Moose/Manual/Delegation.pod 52
lib/Moose/Manual/Delta.pod 639
lib/Moose/Manual/Exceptions/Manifest.pod 805631
lib/Moose/Manual/Exceptions.pod 8288
lib/Moose/Manual/FAQ.pod 52
lib/Moose/Manual/MOP.pod 52
lib/Moose/Manual/MethodModifiers.pod 52
lib/Moose/Manual/MooseX.pod 52
lib/Moose/Manual/Roles.pod 523
lib/Moose/Manual/Support.pod 2120
lib/Moose/Manual/Types.pod 52
lib/Moose/Manual/Unsweetened.pod 52
lib/Moose/Manual.pod 52
lib/Moose/Meta/Attribute/Native/Trait/Array.pm 52
lib/Moose/Meta/Attribute/Native/Trait/Bool.pm 52
lib/Moose/Meta/Attribute/Native/Trait/Code.pm 52
lib/Moose/Meta/Attribute/Native/Trait/Counter.pm 52
lib/Moose/Meta/Attribute/Native/Trait/Hash.pm 63
lib/Moose/Meta/Attribute/Native/Trait/Number.pm 52
lib/Moose/Meta/Attribute/Native/Trait/String.pm 52
lib/Moose/Meta/Attribute/Native/Trait.pm 146
lib/Moose/Meta/Attribute/Native.pm 52
lib/Moose/Meta/Attribute.pm 3133
lib/Moose/Meta/Class/Immutable/Trait.pm 63
lib/Moose/Meta/Class.pm 2321
lib/Moose/Meta/Instance.pm 62
lib/Moose/Meta/Method/Accessor/Native/Array/Writer.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/accessor.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/clear.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/count.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/delete.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/elements.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/first.pm 52
lib/Moose/Meta/Method/Accessor/Native/Array/first_index.pm 52
lib/Moose/Meta/Method/Accessor/Native/Array/get.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/grep.pm 52
lib/Moose/Meta/Method/Accessor/Native/Array/insert.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/is_empty.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/join.pm 52
lib/Moose/Meta/Method/Accessor/Native/Array/map.pm 52
lib/Moose/Meta/Method/Accessor/Native/Array/natatime.pm 63
lib/Moose/Meta/Method/Accessor/Native/Array/pop.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/push.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/reduce.pm 52
lib/Moose/Meta/Method/Accessor/Native/Array/set.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/shallow_clone.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/shift.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/shuffle.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/sort.pm 52
lib/Moose/Meta/Method/Accessor/Native/Array/sort_in_place.pm 52
lib/Moose/Meta/Method/Accessor/Native/Array/splice.pm 52
lib/Moose/Meta/Method/Accessor/Native/Array/uniq.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array/unshift.pm 41
lib/Moose/Meta/Method/Accessor/Native/Array.pm 52
lib/Moose/Meta/Method/Accessor/Native/Bool/not.pm 41
lib/Moose/Meta/Method/Accessor/Native/Bool/set.pm 41
lib/Moose/Meta/Method/Accessor/Native/Bool/toggle.pm 41
lib/Moose/Meta/Method/Accessor/Native/Bool/unset.pm 41
lib/Moose/Meta/Method/Accessor/Native/Code/execute.pm 41
lib/Moose/Meta/Method/Accessor/Native/Code/execute_method.pm 41
lib/Moose/Meta/Method/Accessor/Native/Collection.pm 52
lib/Moose/Meta/Method/Accessor/Native/Counter/Writer.pm 41
lib/Moose/Meta/Method/Accessor/Native/Counter/dec.pm 41
lib/Moose/Meta/Method/Accessor/Native/Counter/inc.pm 41
lib/Moose/Meta/Method/Accessor/Native/Counter/reset.pm 41
lib/Moose/Meta/Method/Accessor/Native/Counter/set.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash/Writer.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash/accessor.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash/clear.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash/count.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash/defined.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash/delete.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash/elements.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash/exists.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash/get.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash/is_empty.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash/keys.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash/kv.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash/set.pm 63
lib/Moose/Meta/Method/Accessor/Native/Hash/shallow_clone.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash/values.pm 41
lib/Moose/Meta/Method/Accessor/Native/Hash.pm 52
lib/Moose/Meta/Method/Accessor/Native/Number/abs.pm 41
lib/Moose/Meta/Method/Accessor/Native/Number/add.pm 41
lib/Moose/Meta/Method/Accessor/Native/Number/div.pm 41
lib/Moose/Meta/Method/Accessor/Native/Number/mod.pm 41
lib/Moose/Meta/Method/Accessor/Native/Number/mul.pm 41
lib/Moose/Meta/Method/Accessor/Native/Number/set.pm 41
lib/Moose/Meta/Method/Accessor/Native/Number/sub.pm 41
lib/Moose/Meta/Method/Accessor/Native/Reader.pm 41
lib/Moose/Meta/Method/Accessor/Native/String/append.pm 41
lib/Moose/Meta/Method/Accessor/Native/String/chomp.pm 41
lib/Moose/Meta/Method/Accessor/Native/String/chop.pm 41
lib/Moose/Meta/Method/Accessor/Native/String/clear.pm 41
lib/Moose/Meta/Method/Accessor/Native/String/inc.pm 41
lib/Moose/Meta/Method/Accessor/Native/String/length.pm 41
lib/Moose/Meta/Method/Accessor/Native/String/match.pm 52
lib/Moose/Meta/Method/Accessor/Native/String/prepend.pm 41
lib/Moose/Meta/Method/Accessor/Native/String/replace.pm 63
lib/Moose/Meta/Method/Accessor/Native/String/substr.pm 74
lib/Moose/Meta/Method/Accessor/Native/Writer.pm 75
lib/Moose/Meta/Method/Accessor/Native.pm 74
lib/Moose/Meta/Method/Accessor.pm 62
lib/Moose/Meta/Method/Augmented.pm 52
lib/Moose/Meta/Method/Constructor.pm 103
lib/Moose/Meta/Method/Delegation.pm 62
lib/Moose/Meta/Method/Destructor.pm 62
lib/Moose/Meta/Method/Meta.pm 62
lib/Moose/Meta/Method/Overridden.pm 52
lib/Moose/Meta/Method.pm 52
lib/Moose/Meta/Mixin/AttributeCore.pm 52
lib/Moose/Meta/Object/Trait.pm 62
lib/Moose/Meta/Role/Application/RoleSummation.pm 1476
lib/Moose/Meta/Role/Application/ToClass.pm 2217
lib/Moose/Meta/Role/Application/ToInstance.pm 614
lib/Moose/Meta/Role/Application/ToRole.pm 2721
lib/Moose/Meta/Role/Application.pm 525
lib/Moose/Meta/Role/Attribute.pm 63
lib/Moose/Meta/Role/Composite.pm 1053
lib/Moose/Meta/Role/Method/Conflicting.pm 62
lib/Moose/Meta/Role/Method/Required.pm 62
lib/Moose/Meta/Role/Method.pm 62
lib/Moose/Meta/Role.pm 1914
lib/Moose/Meta/TypeCoercion/Union.pm 74
lib/Moose/Meta/TypeCoercion.pm 62
lib/Moose/Meta/TypeConstraint/Class.pm 63
lib/Moose/Meta/TypeConstraint/DuckType.pm 74
lib/Moose/Meta/TypeConstraint/Enum.pm 52
lib/Moose/Meta/TypeConstraint/Parameterizable.pm 96
lib/Moose/Meta/TypeConstraint/Parameterized.pm 87
lib/Moose/Meta/TypeConstraint/Registry.pm 62
lib/Moose/Meta/TypeConstraint/Role.pm 63
lib/Moose/Meta/TypeConstraint/Union.pm 83
lib/Moose/Meta/TypeConstraint.pm 116
lib/Moose/Object.pm 73
lib/Moose/Role.pm 1614
lib/Moose/Spec/Role.pod 52
lib/Moose/Unsweetened.pod 52
lib/Moose/Util/MetaRole.pm 115
lib/Moose/Util/TypeConstraints/Builtins.pm 95
lib/Moose/Util/TypeConstraints.pm 149
lib/Moose/Util.pm 716
lib/Moose.pm 1314
lib/Test/Moose.pm 104
lib/metaclass.pm 144
lib/oose.pm 52
moose-todo.txt 90
t/00-report-prereqs.dd 0200
t/00-report-prereqs.t 233143
t/attributes/accessor_override_method.t 31
t/attributes/accessor_overwrite_warning.t 31
t/basics/always_strict_warnings.t 35
t/basics/buildargs_warning.t 31
t/basics/deprecations.t 10
t/basics/super_warns_on_args.t 41
t/bugs/DEMOLISHALL_shortcutted.t 03
t/bugs/attribute_trait_parameters.t 32
t/bugs/lazybuild_required_undef.t 03
t/bugs/mark_as_methods_overloading_breakage.t 037
t/bugs/moose_octal_defaults.t 03
t/bugs/overloading_edge_cases.t 043
t/bugs/role_caller.t 03
t/bugs/super_recursion.t 2525
t/bugs/traits_with_exporter.t 11
t/cmop/ArrayBasedStorage_test.t 51
t/cmop/AttributesWithHistory_test.t 61
t/cmop/BinaryTree_test.t 41
t/cmop/C3MethodDispatchOrder_test.t 92
t/cmop/ClassEncapsulatedAttributes_test.t 61
t/cmop/InsideOutClass_test.t 51
t/cmop/InstanceCountingClass_test.t 51
t/cmop/LazyClass_test.t 51
t/cmop/Perl6Attribute_test.t 51
t/cmop/add_method_debugmode.t 10
t/cmop/anon_class.t 02
t/cmop/anon_class_leak.t 46
t/cmop/attribute_initializer.t 31
t/cmop/deprecated.t 62
t/cmop/immutable_w_custom_metaclass.t 41
t/cmop/inline_structor.t 41
t/cmop/lib/ArrayBasedStorage.pm 10
t/cmop/lib/AttributesWithHistory.pm 10
t/cmop/lib/BinaryTree.pm 10
t/cmop/lib/C3MethodDispatchOrder.pm 10
t/cmop/lib/ClassEncapsulatedAttributes.pm 10
t/cmop/lib/InsideOutClass.pm 10
t/cmop/lib/InstanceCountingClass.pm 10
t/cmop/lib/LazyClass.pm 10
t/cmop/lib/MyMetaClass/Attribute.pm 10
t/cmop/lib/MyMetaClass/Instance.pm 10
t/cmop/lib/MyMetaClass/Method.pm 10
t/cmop/lib/MyMetaClass/Random.pm 10
t/cmop/lib/MyMetaClass.pm 10
t/cmop/lib/Perl6Attribute.pm 10
t/cmop/lib/SyntaxError.pm 20
t/cmop/load.t 812
t/cmop/magic.t 33
t/cmop/metaclass_loads_classes.t 41
t/cmop/metaclass_reinitialize.t 11
t/cmop/methods.t 11
t/cmop/new_and_clone_metaclasses.t 41
t/cmop/scala_style_mixin_composition.t 10
t/cmop/self_introspection.t 14
t/compat/module_refresh_compat.t 31
t/examples/example_Moose_POOP.t 11
t/examples/example_w_DCS.t 41
t/examples/example_w_TestDeep.t 41
t/exceptions/attribute.t 193192
t/exceptions/class-mop-attribute.t 98
t/exceptions/class-mop-class-immutable-trait.t 1211
t/exceptions/class-mop-class.t 123122
t/exceptions/class-mop-method-accessor.t 2019
t/exceptions/class-mop-method-constructor.t 32
t/exceptions/class-mop-method-generated.t 10
t/exceptions/class-mop-method-meta.t 32
t/exceptions/class-mop-method-overload.t 260
t/exceptions/class-mop-method-wrapped.t 10
t/exceptions/class-mop-method.t 76
t/exceptions/class-mop-mixin-hasattributes.t 2322
t/exceptions/class-mop-mixin-hasmethods.t 10
t/exceptions/class-mop-module.t 10
t/exceptions/class-mop-object.t 11
t/exceptions/class-mop-package.t 10
t/exceptions/class.t 4239
t/exceptions/cmop.t 020
t/exceptions/exception-attributeisrequired.t 1540
t/exceptions/exception-lazyattributeneedsadefault.t 21
t/exceptions/exception-role-class.t 1040
t/exceptions/exception-role-role.t 1040
t/exceptions/exception-role-type.t 1010
t/exceptions/frame-leak.t 023
t/exceptions/meta-role.t 76
t/exceptions/metaclass.t 10
t/exceptions/moose-exporter.t 21
t/exceptions/moose-meta-attribute-native-traits.t 10
t/exceptions/moose-meta-class-immutable-trait.t 32
t/exceptions/moose-meta-method-accessor-native-array.t 109
t/exceptions/moose-meta-method-accessor-native-collection.t 65
t/exceptions/moose-meta-method-accessor-native-grep.t 10
t/exceptions/moose-meta-method-accessor-native-hash-set.t 10
t/exceptions/moose-meta-method-accessor-native-hash.t 10
t/exceptions/moose-meta-method-accessor-native-string-match.t 98
t/exceptions/moose-meta-method-accessor-native-string-replace.t 98
t/exceptions/moose-meta-method-accessor-native-string-substr.t 109
t/exceptions/moose-meta-method-accessor-native.t 10
t/exceptions/moose-meta-method-accessor.t 10
t/exceptions/moose-meta-method-augmented.t 10
t/exceptions/moose-meta-method-constructor.t 54
t/exceptions/moose-meta-method-delegation.t 54
t/exceptions/moose-meta-method-destructor.t 109
t/exceptions/moose-meta-method-overridden.t 65
t/exceptions/moose-meta-role-application-rolesummation.t 32
t/exceptions/moose-meta-role-application-toclass.t 2415
t/exceptions/moose-meta-role-application-torole.t 3233
t/exceptions/moose-meta-role-application.t 87
t/exceptions/moose-meta-role-attribute.t 32
t/exceptions/moose-meta-role-composite.t 43
t/exceptions/moose-meta-typecoercion-union.t 21
t/exceptions/moose-meta-typecoercion.t 10
t/exceptions/moose-meta-typeconstraint-enum.t 65
t/exceptions/moose-meta-typeconstraint-parameterizable.t 65
t/exceptions/moose-meta-typeconstraint-parameterized.t 26
t/exceptions/moose-meta-typeconstraint-registry.t 10
t/exceptions/moose-meta-typeconstraint.t 54
t/exceptions/moose-role.t 1415
t/exceptions/moose-util-metarole.t 10
t/exceptions/moose-util-typeconstraints.t 21
t/exceptions/moose.t 1213
t/exceptions/object.t 32
t/exceptions/rt-92818.t 045
t/exceptions/rt-94795.t 034
t/exceptions/stringify.t 0111
t/exceptions/traits.t 034
t/exceptions/typeconstraints.t 5049
t/exceptions/util.t 2122
t/immutable/constructor_is_not_moose.t 41
t/immutable/constructor_is_wrapped.t 41
t/immutable/immutable_roundtrip.t 41
t/immutable/inline_close_over.t 23
t/lib/Bar.pm 10
t/lib/Foo.pm 21
t/lib/MyExporter.pm 20
t/lib/Overloading/ClassConsumesRoleConsumesOverloads.pm 07
t/lib/Overloading/ClassWithCombiningRole.pm 07
t/lib/Overloading/ClassWithOneRole.pm 07
t/lib/Overloading/CombiningClass.pm 07
t/lib/Overloading/CombiningRole.pm 07
t/lib/Overloading/RoleConsumesOverloads.pm 07
t/lib/Overloading/RoleWithOverloads.pm 016
t/lib/Overloading/RoleWithoutOverloads.pm 05
t/lib/OverloadingTests.pm 047
t/metaclasses/create_anon_with_required_attr.t 33
t/metaclasses/exporter_meta_lookup.t 10
t/metaclasses/exporter_sub_names.t 044
t/metaclasses/meta_name.t 622
t/metaclasses/moose_exporter.t 77
t/metaclasses/overloading.t 134437
t/metaclasses/reinitialize.t 22
t/metaclasses/use_base_of_moose.t 10
t/moose_util/moose_util.t 033
t/native_traits/hash_subtypes.t 10
t/recipes/basics_genome_overloadingsubtypesandcoercion.t 0219
t/recipes/basics_geonome_overloadingsubtypesandcoercion.t 2190
t/recipes/extending_debugging_baseclassrole.t 31
t/recipes/legacy_debugging_baseclassreplacement.t 31
t/recipes/legacy_labeled_attributemetaclass.t 086
t/recipes/meta_labeled_attributemetaclass.t 860
t/roles/build.t 42
t/roles/compose_overloading.t 300
t/roles/overloading_combine_to_class.t 033
t/roles/overloading_combine_to_instance.t 039
t/roles/overloading_combine_to_role.t 033
t/roles/overloading_composition_errors.t 0156
t/roles/overloading_remove_attributes_bug.t 036
t/roles/overloading_to_class.t 066
t/roles/overloading_to_instance.t 031
t/roles/overloading_to_role.t 058
t/roles/role_compose_requires.t 22
t/roles/role_composite.t 04
t/roles/role_composition_override.t 11
t/roles/runtime_roles_and_attrs.t 10
t/roles/runtime_roles_and_nonmoose.t 10
t/test_moose/with_immutable.t 30
t/test_moose/with_immutable_tb2.t 700
t/todo_tests/exception_reflects_failed_constraint.t 33
t/todo_tests/various_role_features.t 20
t/type_constraints/inlining.t 34
t/type_constraints/specio.t 2040
t/type_constraints/union_types_and_coercions.t 51
t/type_constraints/with-specio.t 0209
t/zzz-check-breaks.t 098
xs/Moose.xs 22
xs/Overload.c 0186
xs/Overload.xs 80
xs/ToInstance.xs 063
xt/author/00-compile.t 4330
xt/author/authority.t 015
xt/author/eol.t 08
xt/author/memory_leaks.t 7133
xt/author/no-tabs.t 0967
xt/author/pod-coverage.t 0234
xt/author/pod-spell.t 0346
xt/author/test-my-dependents.t 11
xt/release/00-compile.t 0443
xt/release/authority.t 100
xt/release/distmeta.t 31
xt/release/eol.t 80
xt/release/kwalitee.t 27
xt/release/no-tabs.t 4420
xt/release/pod-coverage.t 2200
xt/release/pod-spell.t 3460
xt/release/pod-syntax.t 31
680 files changed (This is a version diff) 926410851
@@ -1,6 +1,231 @@
 Also see Moose::Manual::Delta for more details of, and workarounds
 for, noteworthy changes.
 
+2.1402   2014-11-05
+
+  [BUG FIXES]
+
+  - Fix a test that was trying to load Test::Exception instead of Test::Fatal.
+    (Michael Schout)
+
+2.1401   2014-11-03
+
+  [BUG FIXES]
+
+  - The core overloading support interacted badly with
+    MooseX::MarkAsMethods. If you used MooseX::MarkAsMethods in a role that
+    provided overloading, then that overloading would not be properly applied
+    to consuming classes, leading to very weird errors of the form:
+
+        Can't resolve method "???" overloading """" in package "Class2" ...
+
+    Note that the problems that MooseX::MarkAsMethods fixes are no longer
+    present if you are using Moose 2.1400+ and namespace::autoclean 0.16+. We
+    encourage you to upgrade both of these modules and remove
+    MooseX::MarkAsMethods from your code base.
+
+2.1400   2014-10-31
+
+  [BUG FIXES]
+
+  - Moose exception classes now stringify all stack frames, to avoid issues
+    in global destruction (see RT#99811)
+
+2.1307   2014-10-26 (TRIAL RELEASE)
+
+  [ENHANCEMENTS]
+
+  - Support added to Moose::Exporter for exporting subs by their fully
+    qualified name, as well as coderefs. This avoids internal breakage if some
+    other module has monkey-patched a sub to be exported and left it anonymous
+    (e.g. RT#88669). (Graham Knop, PR#84)
+
+  [BUG FIXES]
+
+  - Further refined the overloading fixes from 2.1306, fixing fallback
+    handling on older perl versions (Dave Rolsky, PR#85)
+
+2.1306   2014-10-25 (TRIAL RELEASE)
+
+  [ENHANCEMENTS]
+
+  - Rewrote overloading implementation to use a new Class::MOP::Overload
+    object. This object properly captures all overloading information. The
+    Class::MOP::Method::Overload class has been removed. (Dave Rolsky, PR#83)
+
+  [BUG FIXES]
+
+  - If a role had method-based overloading but did not actually implement the
+    specified method, its overloading was simply ignored when applying
+    overloading to other roles or classes. Reported by rjbs. RT #98531.
+
+2.1305   2014-10-22 (TRIAL RELEASE)
+
+  [ENHANCEMENTS]
+
+  - By default, exceptions thrown from inside Moose now remove most of the
+    Moose internals from their stack trace when stringifying. This makes for
+    much more readable error messages in most cases. Set the
+    MOOSE_FULL_EXCEPTION env var to true to get the complete stack trace.
+
+2.1304   2014-09-25 (TRIAL RELEASE)
+
+  [BUG FIXES]
+
+   - closed a memory leak in Moose exception objects where captured stack
+     trace frames would contain circular references to the exception objects
+     themselves (Graham Knop, PR#81)
+
+2.1303   2014-09-19 (TRIAL RELEASE)
+
+  [TEST FIXES]
+
+  - fix tests that fail on altered warning messages in perl 5.21.4 (RT#98987)
+
+2.1302   2014-08-19 (TRIAL RELEASE)
+
+  [BUG FIXES]
+
+  - When a role consumes another role and they differ in their overloading
+    fallback settings, the consuming role now silently wins instead of
+    throwing an exception. This is consistent with how other
+    role-consumes-role conflicts are handled.
+  - Fixed the docs for overloading conflicts to match reality.  
+
+2.1301   2014-08-19 (TRIAL RELEASE)
+
+  [BUG FIXES]
+
+  - Conflict detection for overloading operators is now more correct. If a
+    class consumed two roles that both had identical overloading methods
+    (because they got them from some other role, for example), this caused an
+    error, but it shouldn't. GH #4. (rjbs)
+  - Similarly, when a role consumes another role, conflicts in overloading
+    operators are now silently resolved in favor of the consuming role, just
+    as they are with methods. Note that conflicts between the fallback setting
+    for roles are still an error.
+
+2.1300   2014-08-11 (TRIAL RELEASE)
+
+  [ENHANCEMENTS]
+
+  - Moose now has core support for overloading in roles. When a role with
+    overloading is applied to classes or other roles, the overloading settings
+    are transferred to the consumer. Conflicts between roles are treated much
+    like method conflicts. This obviates the need for
+    MooseX::Role::WithOverloading. If you are using
+    MooseX::Role::WithOverloading, upgrade to version 0.15+ and it will simply
+    become a no-op when used with this version of Moose.
+
+  [OTHER]
+
+  - The overloading info methods for roles and classes no longer treat
+    "fallback" as an overloaded op. Instead, there are new
+    get_overload_fallback_value() and set_overload_fallback_value() methods to
+    deal with this explicitly. This is arguably a bug fix.
+
+2.1213   2014-09-25
+
+  [BUG FIXES]
+
+   - closed a memory leak in Moose exception objects where captured stack
+     trace frames would contain circular references to the exception objects
+     themselves (Graham Knop, PR#81)
+
+2.1212   2014-09-19
+
+  [TEST FIXES]
+
+  - fix tests that fail on altered warning messages in perl 5.21.4 (RT#98987)
+
+2.1211   2014-08-11
+
+  [DOCUMENTATION]
+
+  - Updated Changes and Moose::Manual::Delta to note when we started removing
+    lazy_build from docs. Also added a note in the Moose::Meta::Attribute docs
+    stating that use of this feature is discouraged.
+  - Added a pointer from the auto_deref feature to
+    Moose::Meta::Attribute::Native. This is often a better choice.
+
+  [OTHER]
+
+  - The subs installed by Moose::Exporter->setup_import_methods are now named
+    using Sub::Name (Dave Rolsky, RT#97572)
+
+2.1210   2014-07-03
+
+  [DOCUMENTATION]
+
+  - Clarify that Moose::Exception exists for internal usage and that user
+    code is better off using the Throwable role or Throwable::Error superclass.
+  - Moose::Manual::Support policy clarified regarding legacy Perl versions
+
+  [OTHER]
+
+  - tests have been removed for an alpha branch of Test::Builder that will
+    never see the light of day (Exodist)
+
+2.1209   2014-06-04
+
+  [OTHER]
+
+  - The is_anon method now always returns false when called on
+    Moose::Meta::Role::Composite objects. This isn't strictly right, but for
+    the purposes of Moose internals, where "is_anon" really means "needs to be
+    cleaned up", it's correct. This fixes warnings that were seen when using
+    recent Moose (2.1100+) and MooseX::Role::Parameterized roles as part of a
+    composite role. These warnings only appear with Perl 5.16 and earlier.
+
+2.1208   2014-06-01
+
+  [BUG FIXES]
+
+  - fix implementation of throw_exception in internal Class::MOP traits,
+    caused by changes in 2.1207 (ether, RT#96112)
+
+2.1207   2014-05-26
+
+  [OTHER]
+
+  - Fixed Specio support to work with the latest Specio (0.10). This version of
+    Specio no longer uses Moose internally.
+  - exceptions in Class::MOP no longer use Moose::Util, instead using their
+    own private implementation of throw_exception, to avoid needless premature
+    loading of Moose logic.
+
+2.1206   2014-05-14
+
+  [BUG FIXES]
+
+  - exceptions should not throw other exceptions; fixes cases where exceptions
+    were reporting the wrong error (Upasana, RT#92818 and RT#94795)
+
+  [OTHER]
+
+  - prereqs needed strictly for building with Dist::Zilla have been moved from
+    develop requires to develop recommends, to simplify automated testing on
+    older perls that cannot install all Dist::Zilla components
+  - removed instances of metaobjects in exception classes where they're not
+    really required
+
+2.1205   2014-04-15
+
+  [ENHANCEMENTS]
+
+  - new utility interface: Moose::Util::is_role
+
+  [BUG FIXES]
+
+  - better error message provided when trying to load a trait class that does
+    not exist in @INC (Upasana, RT#94731)
+
+  [OTHER]
+
+  - new test added, to run last, which runs `moose-outdated` as a possibly
+    more visible mechanism to provide important information to the user
+    (re RT#92780)
+
 2.1204   2014-02-06
 
   [BUG FIXES]
@@ -16,6 +241,11 @@ for, noteworthy changes.
   - bump prereq on Module::Runtime to properly detect when a module fails to
     load, and fix how we call these subs (Zefram, RT#92770, RT#86394, RT#92791)
 
+  [ENHANCEMENTS]
+
+ - line numbers in shipped code are now almost the same (within 3) as the
+   repository source, for easier debugging
+
 2.1202   2014-01-19
 
   [BUG FIXES]
@@ -167,9 +397,8 @@ for, noteworthy changes.
     Rolsky)
 
   - You can now use Specio types instead of Moose builtins or
-    MooseX::Types. As a bonus, Specio types inline coercion. However, this
-    support is still experimental (as is Specio), so use it with care. (Dave
-    Rolsky)
+    MooseX::Types. However, this support is still experimental (as is Specio),
+    so use it with care. (Dave Rolsky)
 
 2.0900   2013-05-26 (TRIAL RELEASE)
 
@@ -245,6 +474,11 @@ for, noteworthy changes.
     nothing more than a compatibility shim at this point, there's no reason to
     not make it as compatible as possible. Reported by Moritz Onken. (doy)
 
+  [DOCUMENTATION]
+
+  - The lazy_build attribute feature was removed from
+    Moose::Manual::BestPractices.
+
 2.0601   2012-05-01
 
   [BUG FIXES]
@@ -704,6 +938,11 @@ for, noteworthy changes.
     Additionally the 'Object' constraint no longer rejects objects implemented
     as a blessed regular expression. (David Leadbeater)
 
+  [DOCUMENTATION]
+
+  - The lazy_build attribute feature was mostly removed from the docs and is
+    no longer encouraged.
+
   [OTHER]
 
   - Moose::Manual::Support now explicitly states when major releases are
@@ -22,7 +22,7 @@ This is free software, licensed under:
                      Version 1, February 1989
 
  Copyright (C) 1989 Free Software Foundation, Inc.
- 51 Franklin St, Suite 500, Boston, MA  02110-1335  USA
+ 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
@@ -1,4 +1,4 @@
-# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.012.
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.023.
 Changes
 Changes.Class-MOP
 LICENSE
@@ -8,7 +8,6 @@ META.yml
 Makefile.PL
 README.md
 TODO
-author/convert-to-test-fatal
 author/docGenerator.pl
 author/extract-inline-tests
 author/find-dupe-test-numbers
@@ -41,7 +40,9 @@ benchmarks/type_constraints2.pl
 bin/moose-outdated
 dist.ini
 doc/moosex-compile
+inc/CheckAuthorDeps.pm
 inc/CheckDelta.pm
+inc/CheckReleaseType.pm
 inc/Clean.pm
 inc/ExtractInlineTests.pm
 inc/GenerateDocs.pm
@@ -49,7 +50,8 @@ inc/GitUpToDate.pm
 inc/MMHelper.pm
 inc/MakeMaker.pm
 inc/MyInline.pm
-inc/RequireAuthorDeps.pm
+inc/SimpleAuthority.pm
+inc/SimpleProvides.pm
 inc/TestRelease.pm
 lib/Class/MOP.pm
 lib/Class/MOP/Attribute.pm
@@ -63,15 +65,16 @@ lib/Class/MOP/Method/Constructor.pm
 lib/Class/MOP/Method/Generated.pm
 lib/Class/MOP/Method/Inlined.pm
 lib/Class/MOP/Method/Meta.pm
-lib/Class/MOP/Method/Overload.pm
 lib/Class/MOP/Method/Wrapped.pm
 lib/Class/MOP/MiniTrait.pm
 lib/Class/MOP/Mixin.pm
 lib/Class/MOP/Mixin/AttributeCore.pm
 lib/Class/MOP/Mixin/HasAttributes.pm
 lib/Class/MOP/Mixin/HasMethods.pm
+lib/Class/MOP/Mixin/HasOverloads.pm
 lib/Class/MOP/Module.pm
 lib/Class/MOP/Object.pm
+lib/Class/MOP/Overload.pm
 lib/Class/MOP/Package.pm
 lib/Moose.pm
 lib/Moose/Conflicts.pm
@@ -216,6 +219,7 @@ lib/Moose/Exception/InvalidBaseTypeGivenToCreateParameterizedTypeConstraint.pm
 lib/Moose/Exception/InvalidHandleValue.pm
 lib/Moose/Exception/InvalidHasProvidedInARole.pm
 lib/Moose/Exception/InvalidNameForType.pm
+lib/Moose/Exception/InvalidOverloadOperator.pm
 lib/Moose/Exception/InvalidRoleApplication.pm
 lib/Moose/Exception/InvalidTypeConstraint.pm
 lib/Moose/Exception/InvalidTypeGivenToCreateParameterizedTypeConstraint.pm
@@ -244,6 +248,7 @@ lib/Moose/Exception/MethodNameNotFoundInInheritanceHierarchy.pm
 lib/Moose/Exception/MethodNameNotGiven.pm
 lib/Moose/Exception/MustDefineAMethodName.pm
 lib/Moose/Exception/MustDefineAnAttributeName.pm
+lib/Moose/Exception/MustDefineAnOverloadOperator.pm
 lib/Moose/Exception/MustHaveAtLeastOneValueToEnumerate.pm
 lib/Moose/Exception/MustPassAHashOfOptions.pm
 lib/Moose/Exception/MustPassAMooseMetaRoleInstanceOrSubclass.pm
@@ -276,6 +281,13 @@ lib/Moose/Exception/NoImmutableTraitSpecifiedForClass.pm
 lib/Moose/Exception/NoParentGivenToSubtype.pm
 lib/Moose/Exception/OnlyInstancesCanBeCloned.pm
 lib/Moose/Exception/OperatorIsRequired.pm
+lib/Moose/Exception/OverloadConflictInSummation.pm
+lib/Moose/Exception/OverloadRequiresAMetaClass.pm
+lib/Moose/Exception/OverloadRequiresAMetaMethod.pm
+lib/Moose/Exception/OverloadRequiresAMetaOverload.pm
+lib/Moose/Exception/OverloadRequiresAMethodNameOrCoderef.pm
+lib/Moose/Exception/OverloadRequiresAnOperator.pm
+lib/Moose/Exception/OverloadRequiresNamesForCoderef.pm
 lib/Moose/Exception/OverrideConflictInComposition.pm
 lib/Moose/Exception/OverrideConflictInSummation.pm
 lib/Moose/Exception/PackageDoesNotUseMooseExporter.pm
@@ -292,6 +304,7 @@ lib/Moose/Exception/Role/AttributeName.pm
 lib/Moose/Exception/Role/Class.pm
 lib/Moose/Exception/Role/EitherAttributeOrAttributeName.pm
 lib/Moose/Exception/Role/Instance.pm
+lib/Moose/Exception/Role/InstanceClass.pm
 lib/Moose/Exception/Role/InvalidAttributeOptions.pm
 lib/Moose/Exception/Role/Method.pm
 lib/Moose/Exception/Role/ParamsHash.pm
@@ -303,7 +316,6 @@ lib/Moose/Exception/RoleDoesTheExcludedRole.pm
 lib/Moose/Exception/RoleExclusionConflict.pm
 lib/Moose/Exception/RoleNameRequired.pm
 lib/Moose/Exception/RoleNameRequiredForMooseMetaRole.pm
-lib/Moose/Exception/RoleNamesDoNotMatch.pm
 lib/Moose/Exception/RolesDoNotSupportAugment.pm
 lib/Moose/Exception/RolesDoNotSupportExtends.pm
 lib/Moose/Exception/RolesDoNotSupportInner.pm
@@ -314,7 +326,6 @@ lib/Moose/Exception/SingleParamsToNewMustBeHashRef.pm
 lib/Moose/Exception/TriggerMustBeACodeRef.pm
 lib/Moose/Exception/TypeConstraintCannotBeUsedForAParameterizableType.pm
 lib/Moose/Exception/TypeConstraintIsAlreadyCreated.pm
-lib/Moose/Exception/TypeNamesDoNotMatch.pm
 lib/Moose/Exception/TypeParameterMustBeMooseMetaType.pm
 lib/Moose/Exception/UnableToCanonicalizeHandles.pm
 lib/Moose/Exception/UnableToCanonicalizeNonRolePackage.pm
@@ -479,11 +490,11 @@ lib/Moose/Util/TypeConstraints/Builtins.pm
 lib/Test/Moose.pm
 lib/metaclass.pm
 lib/oose.pm
-moose-todo.txt
 mop.c
 mop.h
 perltidyrc
 ppport.h
+t/00-report-prereqs.dd
 t/00-report-prereqs.t
 t/000_load.t
 t/attributes/accessor_context.t
@@ -577,9 +588,11 @@ t/bugs/inheriting_from_roles.t
 t/bugs/inline_reader_bug.t
 t/bugs/instance_application_role_args.t
 t/bugs/lazybuild_required_undef.t
+t/bugs/mark_as_methods_overloading_breakage.t
 t/bugs/moose_exporter_false_circular_reference_rt_63818.t
 t/bugs/moose_octal_defaults.t
 t/bugs/native_trait_handles_bad_value.t
+t/bugs/overloading_edge_cases.t
 t/bugs/reader_precedence_bug.t
 t/bugs/role_caller.t
 t/bugs/subclass_use_base_bug.t
@@ -707,7 +720,6 @@ t/exceptions/class-mop-method-accessor.t
 t/exceptions/class-mop-method-constructor.t
 t/exceptions/class-mop-method-generated.t
 t/exceptions/class-mop-method-meta.t
-t/exceptions/class-mop-method-overload.t
 t/exceptions/class-mop-method-wrapped.t
 t/exceptions/class-mop-method.t
 t/exceptions/class-mop-mixin-hasattributes.t
@@ -716,11 +728,9 @@ t/exceptions/class-mop-module.t
 t/exceptions/class-mop-object.t
 t/exceptions/class-mop-package.t
 t/exceptions/class.t
-t/exceptions/exception-attributeisrequired.t
+t/exceptions/cmop.t
 t/exceptions/exception-lazyattributeneedsadefault.t
-t/exceptions/exception-role-class.t
-t/exceptions/exception-role-role.t
-t/exceptions/exception-role-type.t
+t/exceptions/frame-leak.t
 t/exceptions/meta-role.t
 t/exceptions/metaclass.t
 t/exceptions/moose-exporter.t
@@ -760,6 +770,10 @@ t/exceptions/moose-util-typeconstraints.t
 t/exceptions/moose.t
 t/exceptions/object.t
 t/exceptions/overload.t
+t/exceptions/rt-92818.t
+t/exceptions/rt-94795.t
+t/exceptions/stringify.t
+t/exceptions/traits.t
 t/exceptions/typeconstraints.t
 t/exceptions/util.t
 t/immutable/apply_roles_to_immutable.t
@@ -793,6 +807,15 @@ t/lib/MyMooseA.pm
 t/lib/MyMooseB.pm
 t/lib/MyMooseObject.pm
 t/lib/NoInlineAttribute.pm
+t/lib/Overloading/ClassConsumesRoleConsumesOverloads.pm
+t/lib/Overloading/ClassWithCombiningRole.pm
+t/lib/Overloading/ClassWithOneRole.pm
+t/lib/Overloading/CombiningClass.pm
+t/lib/Overloading/CombiningRole.pm
+t/lib/Overloading/RoleConsumesOverloads.pm
+t/lib/Overloading/RoleWithOverloads.pm
+t/lib/Overloading/RoleWithoutOverloads.pm
+t/lib/OverloadingTests.pm
 t/lib/Real/Package.pm
 t/lib/Role/BreakOnLoad.pm
 t/lib/Role/Child.pm
@@ -805,6 +828,7 @@ t/metaclasses/easy_init_meta.t
 t/metaclasses/export_with_prototype.t
 t/metaclasses/exporter_also_with_trait.t
 t/metaclasses/exporter_meta_lookup.t
+t/metaclasses/exporter_sub_names.t
 t/metaclasses/goto_moose_import.t
 t/metaclasses/immutable_metaclass_compat_bug.t
 t/metaclasses/meta_name.t
@@ -861,14 +885,14 @@ t/recipes/basics_binarytree_attributefeatures.t
 t/recipes/basics_company_subtypes.t
 t/recipes/basics_datetime_extendingnonmooseparent.t
 t/recipes/basics_document_augmentandinner.t
-t/recipes/basics_geonome_overloadingsubtypesandcoercion.t
+t/recipes/basics_genome_overloadingsubtypesandcoercion.t
 t/recipes/basics_http_subtypesandcoercion.t
 t/recipes/basics_point_attributesandsubclassing.t
 t/recipes/extending_debugging_baseclassrole.t
 t/recipes/extending_mooseish_moosesugar.t
 t/recipes/legacy_debugging_baseclassreplacement.t
+t/recipes/legacy_labeled_attributemetaclass.t
 t/recipes/meta_globref_instancemetaclass.t
-t/recipes/meta_labeled_attributemetaclass.t
 t/recipes/meta_labeled_attributetrait.t
 t/recipes/meta_privateorpublic_methodmetaclass.t
 t/recipes/meta_table_metaclasstrait.t
@@ -879,7 +903,6 @@ t/roles/anonymous_roles.t
 t/roles/application_toclass.t
 t/roles/apply_role.t
 t/roles/build.t
-t/roles/compose_overloading.t
 t/roles/conflict_many_methods.t
 t/roles/create_role.t
 t/roles/create_role_subclass.t
@@ -895,6 +918,14 @@ t/roles/methods.t
 t/roles/more_alias_and_exclude.t
 t/roles/more_role_edge_cases.t
 t/roles/new_meta_role.t
+t/roles/overloading_combine_to_class.t
+t/roles/overloading_combine_to_instance.t
+t/roles/overloading_combine_to_role.t
+t/roles/overloading_composition_errors.t
+t/roles/overloading_remove_attributes_bug.t
+t/roles/overloading_to_class.t
+t/roles/overloading_to_instance.t
+t/roles/overloading_to_role.t
 t/roles/overriding.t
 t/roles/reinitialize_anon_role.t
 t/roles/role.t
@@ -930,7 +961,6 @@ t/test_moose/test_moose_does_ok.t
 t/test_moose/test_moose_has_attribute_ok.t
 t/test_moose/test_moose_meta_ok.t
 t/test_moose/with_immutable.t
-t/test_moose/with_immutable_tb2.t
 t/todo_tests/exception_reflects_failed_constraint.t
 t/todo_tests/immutable_n_around.t
 t/todo_tests/moose_and_threads.t
@@ -960,7 +990,6 @@ t/type_constraints/name_conflicts.t
 t/type_constraints/normalize_type_name.t
 t/type_constraints/parameterize_from.t
 t/type_constraints/role_type_constraint.t
-t/type_constraints/specio.t
 t/type_constraints/subtype_auto_vivify_parent.t
 t/type_constraints/subtyping_parameterized_types.t
 t/type_constraints/subtyping_union_types.t
@@ -979,6 +1008,8 @@ t/type_constraints/util_type_coercion.t
 t/type_constraints/util_type_constraints.t
 t/type_constraints/util_type_constraints_export.t
 t/type_constraints/util_type_reloading.t
+t/type_constraints/with-specio.t
+t/zzz-check-breaks.t
 xs/Attribute.xs
 xs/AttributeCore.xs
 xs/Class.xs
@@ -990,20 +1021,21 @@ xs/Instance.xs
 xs/MOP.xs
 xs/Method.xs
 xs/Moose.xs
-xs/Overload.xs
+xs/Overload.c
 xs/Package.xs
+xs/ToInstance.xs
 xs/typemap
-xt/author/00-compile.t
+xt/author/authority.t
 xt/author/debugger-duck_type.t
+xt/author/eol.t
 xt/author/memory_leaks.t
+xt/author/no-tabs.t
+xt/author/pod-coverage.t
+xt/author/pod-spell.t
 xt/author/test-my-dependents.t
-xt/release/authority.t
+xt/release/00-compile.t
 xt/release/cpan-changes.t
 xt/release/distmeta.t
-xt/release/eol.t
 xt/release/kwalitee.t
 xt/release/mojibake.t
-xt/release/no-tabs.t
-xt/release/pod-coverage.t
-xt/release/pod-spell.t
 xt/release/pod-syntax.t
@@ -5,7 +5,7 @@
       "Dave Rolsky <autarch@urth.org>",
       "Jesse Luehrs <doy@tozt.net>",
       "Shawn M Moore <code@sartak.org>",
-      "\u05d9\u05d5\u05d1\u05dc \u05e7\u05d5\u05d2'\u05de\u05df (Yuval Kogman) <nothingmuch@woobling.org>",
+      "יובל קוג'מן (Yuval Kogman) <nothingmuch@woobling.org>",
       "Karen Etheridge <ether@cpan.org>",
       "Florian Ragwitz <rafl@debian.org>",
       "Hans Dieter Pearcey <hdp@weftsoar.net>",
@@ -13,7 +13,7 @@
       "Matt S Trout <mst@shadowcat.co.uk>"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Dist::Zilla version 5.012, CPAN::Meta::Converter version 2.133380",
+   "generated_by" : "Dist::Zilla version 5.023, CPAN::Meta::Converter version 2.142690",
    "license" : [
       "perl_5"
    ],
@@ -51,43 +51,84 @@
          "requires" : {
             "Dist::CheckConflicts" : "0.02",
             "ExtUtils::CBuilder" : "0.27",
-            "ExtUtils::MakeMaker" : "6.30",
+            "ExtUtils::MakeMaker" : "0",
             "File::Spec" : "0"
          }
       },
       "develop" : {
-         "conflicts" : {
-            "Dist::Zilla::Plugin::Conflicts" : "== 0.11"
-         },
          "requires" : {
             "Algorithm::C3" : "0",
-            "CPAN::Meta::Requirements" : "0",
             "Class::Load" : "0.07",
-            "DBM::Deep" : "0",
+            "DBM::Deep" : "1.003",
             "Data::Visitor" : "0",
             "DateTime" : "0",
             "DateTime::Calendar::Mayan" : "0",
             "DateTime::Format::MySQL" : "0",
             "Declare::Constraints::Simple" : "0",
-            "Dist::Zilla" : "5.012",
-            "Dist::Zilla::Plugin::Authority" : "0",
+            "ExtUtils::MakeMaker::Dist::Zilla::Develop" : "0",
+            "File::Find::Rule" : "0",
+            "File::Spec" : "0",
+            "HTTP::Headers" : "0",
+            "IO::File" : "0",
+            "IO::Handle" : "0",
+            "IO::String" : "0",
+            "IPC::Open3" : "0",
+            "Locale::US" : "0",
+            "Module::CPANTS::Analyse" : "0.92",
+            "Module::Refresh" : "0",
+            "MooseX::MarkAsMethods" : "0",
+            "MooseX::NonMoose" : "0",
+            "PadWalker" : "0",
+            "Params::Coerce" : "0",
+            "Regexp::Common" : "0",
+            "SUPER" : "1.10",
+            "Specio" : "0.10",
+            "Test::CPAN::Changes" : "0.19",
+            "Test::CPAN::Meta" : "0",
+            "Test::Deep" : "0",
+            "Test::EOL" : "0",
+            "Test::Inline" : "0",
+            "Test::Kwalitee" : "1.21",
+            "Test::LeakTrace" : "0",
+            "Test::Memory::Cycle" : "0",
+            "Test::More" : "0.94",
+            "Test::NoTabs" : "0",
+            "Test::Output" : "0",
+            "Test::Pod" : "1.41",
+            "Test::Pod::Coverage" : "1.04",
+            "Test::Spelling" : "0",
+            "URI" : "0",
+            "blib" : "0"
+         },
+         "suggests" : {
+            "CPAN::Meta::Requirements" : "0",
+            "Carp" : "1.22",
+            "Class::Load" : "0.09",
+            "Class::Load::XS" : "0.01",
+            "Data::OptList" : "0.107",
+            "Devel::GlobalDestruction" : "0",
+            "Devel::OverloadInfo" : "0.002",
+            "Devel::StackTrace" : "1.33",
+            "Dist::Zilla" : "5",
             "Dist::Zilla::Plugin::CheckChangesHasContent" : "0",
+            "Dist::Zilla::Plugin::CheckVersionIncrement" : "0",
             "Dist::Zilla::Plugin::ConfirmRelease" : "0",
-            "Dist::Zilla::Plugin::Conflicts" : "0",
-            "Dist::Zilla::Plugin::ContributorsFromGit" : "0",
-            "Dist::Zilla::Plugin::EOLTests" : "0",
+            "Dist::Zilla::Plugin::Conflicts" : "0.16",
+            "Dist::Zilla::Plugin::EnsurePrereqsInstalled" : "0.003",
             "Dist::Zilla::Plugin::ExecDir" : "0",
-            "Dist::Zilla::Plugin::GatherDir" : "0",
+            "Dist::Zilla::Plugin::FileFinder::ByName" : "0",
+            "Dist::Zilla::Plugin::FileFinder::Filter" : "0",
+            "Dist::Zilla::Plugin::GatherDir" : "5.021",
             "Dist::Zilla::Plugin::Git::Check" : "0",
             "Dist::Zilla::Plugin::Git::CheckFor::CorrectBranch" : "0",
             "Dist::Zilla::Plugin::Git::Commit" : "0",
+            "Dist::Zilla::Plugin::Git::Contributors" : "0",
             "Dist::Zilla::Plugin::Git::Push" : "0",
             "Dist::Zilla::Plugin::Git::Remote::Check" : "0",
             "Dist::Zilla::Plugin::Git::Tag" : "0",
             "Dist::Zilla::Plugin::License" : "0",
             "Dist::Zilla::Plugin::MakeMaker::Awesome" : "0",
             "Dist::Zilla::Plugin::Manifest" : "0",
-            "Dist::Zilla::Plugin::ManifestSkip" : "0",
             "Dist::Zilla::Plugin::MetaConfig" : "0",
             "Dist::Zilla::Plugin::MetaJSON" : "0",
             "Dist::Zilla::Plugin::MetaNoIndex" : "0",
@@ -97,62 +138,59 @@
             "Dist::Zilla::Plugin::MetaYAML" : "0",
             "Dist::Zilla::Plugin::MojibakeTests" : "0",
             "Dist::Zilla::Plugin::NextRelease" : "0",
-            "Dist::Zilla::Plugin::PkgVersion" : "0",
+            "Dist::Zilla::Plugin::PkgVersion" : "5.010",
             "Dist::Zilla::Plugin::PodSyntaxTests" : "0",
             "Dist::Zilla::Plugin::PodWeaver" : "4.004",
             "Dist::Zilla::Plugin::Prereqs" : "0",
             "Dist::Zilla::Plugin::Prereqs::AuthorDeps" : "0",
             "Dist::Zilla::Plugin::PromptIfStale" : "0",
             "Dist::Zilla::Plugin::PruneCruft" : "0",
-            "Dist::Zilla::Plugin::PruneFiles" : "0",
+            "Dist::Zilla::Plugin::Run::AfterRelease" : "0",
             "Dist::Zilla::Plugin::RunExtraTests" : "0",
             "Dist::Zilla::Plugin::ShareDir" : "0",
             "Dist::Zilla::Plugin::SurgicalPodWeaver" : "0",
             "Dist::Zilla::Plugin::Test::CPAN::Changes" : "0",
+            "Dist::Zilla::Plugin::Test::CheckBreaks" : "0",
             "Dist::Zilla::Plugin::Test::Compile" : "2.037",
+            "Dist::Zilla::Plugin::Test::EOL" : "0.14",
             "Dist::Zilla::Plugin::Test::Kwalitee" : "0",
             "Dist::Zilla::Plugin::Test::NoTabs" : "0",
             "Dist::Zilla::Plugin::Test::ReportPrereqs" : "0",
             "Dist::Zilla::Plugin::TestRelease" : "0",
             "Dist::Zilla::Plugin::UploadToCPAN" : "0",
-            "ExtUtils::MakeMaker::Dist::Zilla::Develop" : "0",
+            "Dist::Zilla::Util::AuthorDeps" : "5.021",
+            "Eval::Closure" : "0.04",
+            "ExtUtils::CBuilder" : "0.27",
             "File::Find::Rule" : "0",
             "File::Spec" : "0",
             "File::pushd" : "0",
-            "HTTP::Headers" : "0",
-            "IO::File" : "0",
-            "IO::Handle" : "0",
-            "IO::String" : "0",
-            "IPC::Open3" : "0",
             "IPC::System::Simple" : "0",
-            "Locale::US" : "0",
-            "Module::CPANTS::Analyse" : "0.92",
-            "Module::Info" : "0",
-            "Module::Refresh" : "0",
-            "MooseX::NonMoose" : "0",
-            "PadWalker" : "0",
-            "Params::Coerce" : "0",
+            "List::MoreUtils" : "0.28",
+            "List::Util" : "1.33",
+            "MRO::Compat" : "0.05",
+            "Module::Runtime" : "0.014",
+            "Module::Runtime::Conflicts" : "0",
+            "Package::DeprecationManager" : "0.11",
+            "Package::Stash" : "0.32",
+            "Package::Stash::XS" : "0.24",
+            "Params::Util" : "1.00",
             "Path::Tiny" : "0",
             "Pod::Elemental::PerlMunger" : "0.200001",
-            "Regexp::Common" : "0",
-            "SUPER" : "0",
-            "Specio" : "0.07",
-            "Test::CPAN::Changes" : "0.19",
-            "Test::CPAN::Meta" : "0",
+            "Scalar::Util" : "1.19",
+            "Sub::Exporter" : "0.980",
+            "Sub::Name" : "0.05",
+            "Task::Weaken" : "0",
             "Test::Deep" : "0",
-            "Test::DependentModules" : "0.13",
             "Test::Inline" : "0",
             "Test::Inline::Extract" : "0",
-            "Test::Kwalitee" : "1.15",
-            "Test::LeakTrace" : "0",
-            "Test::Memory::Cycle" : "0",
-            "Test::More" : "0.94",
-            "Test::NoTabs" : "0",
-            "Test::Output" : "0",
-            "Test::Pod" : "1.41",
-            "Test::Spelling" : "0",
-            "URI" : "0",
-            "blib" : "0"
+            "Try::Tiny" : "0.02",
+            "inc::CheckAuthorDeps" : "0",
+            "inc::CheckReleaseType" : "0",
+            "inc::SimpleAuthority" : "0",
+            "parent" : "0.223",
+            "perl" : "v5.8.3",
+            "strict" : "1.03",
+            "warnings" : "1.03"
          }
       },
       "runtime" : {
@@ -165,12 +203,15 @@
             "Class::Load::XS" : "0.01",
             "Data::OptList" : "0.107",
             "Devel::GlobalDestruction" : "0",
-            "Devel::StackTrace" : "1.30",
+            "Devel::OverloadInfo" : "0.002",
+            "Devel::StackTrace" : "1.33",
             "Dist::CheckConflicts" : "0.02",
             "Eval::Closure" : "0.04",
             "List::MoreUtils" : "0.28",
+            "List::Util" : "1.33",
             "MRO::Compat" : "0.05",
             "Module::Runtime" : "0.014",
+            "Module::Runtime::Conflicts" : "0",
             "Package::DeprecationManager" : "0.11",
             "Package::Stash" : "0.32",
             "Package::Stash::XS" : "0.24",
@@ -181,1377 +222,1416 @@
             "Task::Weaken" : "0",
             "Try::Tiny" : "0.02",
             "parent" : "0.223",
-            "perl" : "v5.8.3"
+            "perl" : "v5.8.3",
+            "strict" : "1.03",
+            "warnings" : "1.03"
          }
       },
       "test" : {
          "recommends" : {
-            "CPAN::Meta" : "0",
-            "CPAN::Meta::Requirements" : "2.120900"
+            "CPAN::Meta" : "2.120900"
          },
          "requires" : {
+            "CPAN::Meta::Check" : "0.007",
+            "CPAN::Meta::Requirements" : "0",
+            "ExtUtils::MakeMaker" : "0",
+            "File::Spec" : "0",
+            "Test::CleanNamespaces" : "0.13",
             "Test::Fatal" : "0.001",
             "Test::More" : "0.88",
-            "Test::Requires" : "0.05"
+            "Test::Requires" : "0.05",
+            "Test::Warnings" : "0.016"
          }
       }
    },
    "provides" : {
       "Class::MOP" : {
          "file" : "lib/Class/MOP.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Class::MOP::Attribute" : {
          "file" : "lib/Class/MOP/Attribute.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Class::MOP::Class" : {
          "file" : "lib/Class/MOP/Class.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Class::MOP::Instance" : {
          "file" : "lib/Class/MOP/Instance.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Class::MOP::Method" : {
          "file" : "lib/Class/MOP/Method.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Class::MOP::Method::Accessor" : {
          "file" : "lib/Class/MOP/Method/Accessor.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Class::MOP::Method::Constructor" : {
          "file" : "lib/Class/MOP/Method/Constructor.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Class::MOP::Method::Generated" : {
          "file" : "lib/Class/MOP/Method/Generated.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Class::MOP::Method::Inlined" : {
          "file" : "lib/Class/MOP/Method/Inlined.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Class::MOP::Method::Meta" : {
          "file" : "lib/Class/MOP/Method/Meta.pm",
-         "version" : "2.1204"
-      },
-      "Class::MOP::Method::Overload" : {
-         "file" : "lib/Class/MOP/Method/Overload.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Class::MOP::Method::Wrapped" : {
          "file" : "lib/Class/MOP/Method/Wrapped.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Class::MOP::Module" : {
          "file" : "lib/Class/MOP/Module.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Class::MOP::Object" : {
          "file" : "lib/Class/MOP/Object.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
+      },
+      "Class::MOP::Overload" : {
+         "file" : "lib/Class/MOP/Overload.pm",
+         "version" : "2.1402"
       },
       "Class::MOP::Package" : {
          "file" : "lib/Class/MOP/Package.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose" : {
          "file" : "lib/Moose.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook" : {
          "file" : "lib/Moose/Cookbook.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Basics::BankAccount_MethodModifiersAndSubclassing" : {
          "file" : "lib/Moose/Cookbook/Basics/BankAccount_MethodModifiersAndSubclassing.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Basics::BinaryTree_AttributeFeatures" : {
          "file" : "lib/Moose/Cookbook/Basics/BinaryTree_AttributeFeatures.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Basics::BinaryTree_BuilderAndLazyBuild" : {
          "file" : "lib/Moose/Cookbook/Basics/BinaryTree_BuilderAndLazyBuild.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Basics::Company_Subtypes" : {
          "file" : "lib/Moose/Cookbook/Basics/Company_Subtypes.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Basics::DateTime_ExtendingNonMooseParent" : {
          "file" : "lib/Moose/Cookbook/Basics/DateTime_ExtendingNonMooseParent.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Basics::Document_AugmentAndInner" : {
          "file" : "lib/Moose/Cookbook/Basics/Document_AugmentAndInner.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Basics::Genome_OverloadingSubtypesAndCoercion" : {
          "file" : "lib/Moose/Cookbook/Basics/Genome_OverloadingSubtypesAndCoercion.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Basics::HTTP_SubtypesAndCoercion" : {
          "file" : "lib/Moose/Cookbook/Basics/HTTP_SubtypesAndCoercion.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Basics::Immutable" : {
          "file" : "lib/Moose/Cookbook/Basics/Immutable.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Basics::Person_BUILDARGSAndBUILD" : {
          "file" : "lib/Moose/Cookbook/Basics/Person_BUILDARGSAndBUILD.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Basics::Point_AttributesAndSubclassing" : {
          "file" : "lib/Moose/Cookbook/Basics/Point_AttributesAndSubclassing.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Extending::Debugging_BaseClassRole" : {
          "file" : "lib/Moose/Cookbook/Extending/Debugging_BaseClassRole.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Extending::ExtensionOverview" : {
          "file" : "lib/Moose/Cookbook/Extending/ExtensionOverview.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Extending::Mooseish_MooseSugar" : {
          "file" : "lib/Moose/Cookbook/Extending/Mooseish_MooseSugar.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Legacy::Debugging_BaseClassReplacement" : {
          "file" : "lib/Moose/Cookbook/Legacy/Debugging_BaseClassReplacement.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
+      },
+      "Moose::Cookbook::Legacy::Labeled_AttributeMetaclass" : {
+         "file" : "lib/Moose/Cookbook/Legacy/Labeled_AttributeMetaclass.pod",
+         "version" : "2.1402"
+      },
+      "Moose::Cookbook::Legacy::Table_ClassMetaclass" : {
+         "file" : "lib/Moose/Cookbook/Legacy/Table_ClassMetaclass.pod",
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Meta::GlobRef_InstanceMetaclass" : {
          "file" : "lib/Moose/Cookbook/Meta/GlobRef_InstanceMetaclass.pod",
-         "version" : "2.1204"
-      },
-      "Moose::Cookbook::Meta::Labeled_AttributeMetaclass" : {
-         "file" : "lib/Moose/Cookbook/Legacy/Labeled_AttributeMetaclass.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Meta::Labeled_AttributeTrait" : {
          "file" : "lib/Moose/Cookbook/Meta/Labeled_AttributeTrait.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Meta::PrivateOrPublic_MethodMetaclass" : {
          "file" : "lib/Moose/Cookbook/Meta/PrivateOrPublic_MethodMetaclass.pod",
-         "version" : "2.1204"
-      },
-      "Moose::Cookbook::Meta::Table_ClassMetaclass" : {
-         "file" : "lib/Moose/Cookbook/Legacy/Table_ClassMetaclass.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Meta::Table_MetaclassTrait" : {
          "file" : "lib/Moose/Cookbook/Meta/Table_MetaclassTrait.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Meta::WhyMeta" : {
          "file" : "lib/Moose/Cookbook/Meta/WhyMeta.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Roles::ApplicationToInstance" : {
          "file" : "lib/Moose/Cookbook/Roles/ApplicationToInstance.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Roles::Comparable_CodeReuse" : {
          "file" : "lib/Moose/Cookbook/Roles/Comparable_CodeReuse.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Roles::Restartable_AdvancedComposition" : {
          "file" : "lib/Moose/Cookbook/Roles/Restartable_AdvancedComposition.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Snack::Keywords" : {
          "file" : "lib/Moose/Cookbook/Snack/Keywords.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Snack::Types" : {
          "file" : "lib/Moose/Cookbook/Snack/Types.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Cookbook::Style" : {
          "file" : "lib/Moose/Cookbook/Style.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception" : {
          "file" : "lib/Moose/Exception.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::AccessorMustReadWrite" : {
          "file" : "lib/Moose/Exception/AccessorMustReadWrite.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::AddParameterizableTypeTakesParameterizableType" : {
          "file" : "lib/Moose/Exception/AddParameterizableTypeTakesParameterizableType.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::AddRoleTakesAMooseMetaRoleInstance" : {
          "file" : "lib/Moose/Exception/AddRoleTakesAMooseMetaRoleInstance.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::AddRoleToARoleTakesAMooseMetaRole" : {
          "file" : "lib/Moose/Exception/AddRoleToARoleTakesAMooseMetaRole.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::ApplyTakesABlessedInstance" : {
          "file" : "lib/Moose/Exception/ApplyTakesABlessedInstance.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::AttachToClassNeedsAClassMOPClassInstanceOrASubclass" : {
          "file" : "lib/Moose/Exception/AttachToClassNeedsAClassMOPClassInstanceOrASubclass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::AttributeConflictInRoles" : {
          "file" : "lib/Moose/Exception/AttributeConflictInRoles.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::AttributeConflictInSummation" : {
          "file" : "lib/Moose/Exception/AttributeConflictInSummation.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::AttributeExtensionIsNotSupportedInRoles" : {
          "file" : "lib/Moose/Exception/AttributeExtensionIsNotSupportedInRoles.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::AttributeIsRequired" : {
          "file" : "lib/Moose/Exception/AttributeIsRequired.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass" : {
          "file" : "lib/Moose/Exception/AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::AttributeNamesDoNotMatch" : {
          "file" : "lib/Moose/Exception/AttributeNamesDoNotMatch.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::AttributeValueIsNotAnObject" : {
          "file" : "lib/Moose/Exception/AttributeValueIsNotAnObject.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::AttributeValueIsNotDefined" : {
          "file" : "lib/Moose/Exception/AttributeValueIsNotDefined.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::AutoDeRefNeedsArrayRefOrHashRef" : {
          "file" : "lib/Moose/Exception/AutoDeRefNeedsArrayRefOrHashRef.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::BadOptionFormat" : {
          "file" : "lib/Moose/Exception/BadOptionFormat.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::BothBuilderAndDefaultAreNotAllowed" : {
          "file" : "lib/Moose/Exception/BothBuilderAndDefaultAreNotAllowed.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::BuilderDoesNotExist" : {
          "file" : "lib/Moose/Exception/BuilderDoesNotExist.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::BuilderMethodNotSupportedForAttribute" : {
          "file" : "lib/Moose/Exception/BuilderMethodNotSupportedForAttribute.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::BuilderMethodNotSupportedForInlineAttribute" : {
          "file" : "lib/Moose/Exception/BuilderMethodNotSupportedForInlineAttribute.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::BuilderMustBeAMethodName" : {
          "file" : "lib/Moose/Exception/BuilderMustBeAMethodName.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CallingMethodOnAnImmutableInstance" : {
          "file" : "lib/Moose/Exception/CallingMethodOnAnImmutableInstance.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CallingReadOnlyMethodOnAnImmutableInstance" : {
          "file" : "lib/Moose/Exception/CallingReadOnlyMethodOnAnImmutableInstance.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CanExtendOnlyClasses" : {
          "file" : "lib/Moose/Exception/CanExtendOnlyClasses.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CanOnlyConsumeRole" : {
          "file" : "lib/Moose/Exception/CanOnlyConsumeRole.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CanOnlyWrapBlessedCode" : {
          "file" : "lib/Moose/Exception/CanOnlyWrapBlessedCode.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CanReblessOnlyIntoASubclass" : {
          "file" : "lib/Moose/Exception/CanReblessOnlyIntoASubclass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CanReblessOnlyIntoASuperclass" : {
          "file" : "lib/Moose/Exception/CanReblessOnlyIntoASuperclass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotAddAdditionalTypeCoercionsToUnion" : {
          "file" : "lib/Moose/Exception/CannotAddAdditionalTypeCoercionsToUnion.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotAddAsAnAttributeToARole" : {
          "file" : "lib/Moose/Exception/CannotAddAsAnAttributeToARole.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotApplyBaseClassRolesToRole" : {
          "file" : "lib/Moose/Exception/CannotApplyBaseClassRolesToRole.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotAssignValueToReadOnlyAccessor" : {
          "file" : "lib/Moose/Exception/CannotAssignValueToReadOnlyAccessor.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotAugmentIfLocalMethodPresent" : {
          "file" : "lib/Moose/Exception/CannotAugmentIfLocalMethodPresent.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotAugmentNoSuperMethod" : {
          "file" : "lib/Moose/Exception/CannotAugmentNoSuperMethod.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotAutoDerefWithoutIsa" : {
          "file" : "lib/Moose/Exception/CannotAutoDerefWithoutIsa.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotAutoDereferenceTypeConstraint" : {
          "file" : "lib/Moose/Exception/CannotAutoDereferenceTypeConstraint.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotCalculateNativeType" : {
          "file" : "lib/Moose/Exception/CannotCalculateNativeType.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotCallAnAbstractBaseMethod" : {
          "file" : "lib/Moose/Exception/CannotCallAnAbstractBaseMethod.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotCallAnAbstractMethod" : {
          "file" : "lib/Moose/Exception/CannotCallAnAbstractMethod.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotCoerceAWeakRef" : {
          "file" : "lib/Moose/Exception/CannotCoerceAWeakRef.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotCoerceAttributeWhichHasNoCoercion" : {
          "file" : "lib/Moose/Exception/CannotCoerceAttributeWhichHasNoCoercion.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotCreateHigherOrderTypeWithoutATypeParameter" : {
          "file" : "lib/Moose/Exception/CannotCreateHigherOrderTypeWithoutATypeParameter.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresent" : {
          "file" : "lib/Moose/Exception/CannotCreateMethodAliasLocalMethodIsPresent.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresentInClass" : {
          "file" : "lib/Moose/Exception/CannotCreateMethodAliasLocalMethodIsPresentInClass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotDelegateLocalMethodIsPresent" : {
          "file" : "lib/Moose/Exception/CannotDelegateLocalMethodIsPresent.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotDelegateWithoutIsa" : {
          "file" : "lib/Moose/Exception/CannotDelegateWithoutIsa.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotFindDelegateMetaclass" : {
          "file" : "lib/Moose/Exception/CannotFindDelegateMetaclass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotFindType" : {
          "file" : "lib/Moose/Exception/CannotFindType.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotFindTypeGivenToMatchOnType" : {
          "file" : "lib/Moose/Exception/CannotFindTypeGivenToMatchOnType.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotFixMetaclassCompatibility" : {
          "file" : "lib/Moose/Exception/CannotFixMetaclassCompatibility.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotGenerateInlineConstraint" : {
          "file" : "lib/Moose/Exception/CannotGenerateInlineConstraint.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotInitializeMooseMetaRoleComposite" : {
          "file" : "lib/Moose/Exception/CannotInitializeMooseMetaRoleComposite.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotInlineTypeConstraintCheck" : {
          "file" : "lib/Moose/Exception/CannotInlineTypeConstraintCheck.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotLocatePackageInINC" : {
          "file" : "lib/Moose/Exception/CannotLocatePackageInINC.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotMakeMetaclassCompatible" : {
          "file" : "lib/Moose/Exception/CannotMakeMetaclassCompatible.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotOverrideALocalMethod" : {
          "file" : "lib/Moose/Exception/CannotOverrideALocalMethod.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotOverrideBodyOfMetaMethods" : {
          "file" : "lib/Moose/Exception/CannotOverrideBodyOfMetaMethods.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotOverrideLocalMethodIsPresent" : {
          "file" : "lib/Moose/Exception/CannotOverrideLocalMethodIsPresent.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotOverrideNoSuperMethod" : {
          "file" : "lib/Moose/Exception/CannotOverrideNoSuperMethod.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotRegisterUnnamedTypeConstraint" : {
          "file" : "lib/Moose/Exception/CannotRegisterUnnamedTypeConstraint.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CannotUseLazyBuildAndDefaultSimultaneously" : {
          "file" : "lib/Moose/Exception/CannotUseLazyBuildAndDefaultSimultaneously.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CircularReferenceInAlso" : {
          "file" : "lib/Moose/Exception/CircularReferenceInAlso.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::ClassDoesNotHaveInitMeta" : {
          "file" : "lib/Moose/Exception/ClassDoesNotHaveInitMeta.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::ClassDoesTheExcludedRole" : {
          "file" : "lib/Moose/Exception/ClassDoesTheExcludedRole.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::ClassNamesDoNotMatch" : {
          "file" : "lib/Moose/Exception/ClassNamesDoNotMatch.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CloneObjectExpectsAnInstanceOfMetaclass" : {
          "file" : "lib/Moose/Exception/CloneObjectExpectsAnInstanceOfMetaclass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CodeBlockMustBeACodeRef" : {
          "file" : "lib/Moose/Exception/CodeBlockMustBeACodeRef.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CoercingWithoutCoercions" : {
          "file" : "lib/Moose/Exception/CoercingWithoutCoercions.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CoercionAlreadyExists" : {
          "file" : "lib/Moose/Exception/CoercionAlreadyExists.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CoercionNeedsTypeConstraint" : {
          "file" : "lib/Moose/Exception/CoercionNeedsTypeConstraint.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::ConflictDetectedInCheckRoleExclusions" : {
          "file" : "lib/Moose/Exception/ConflictDetectedInCheckRoleExclusions.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::ConflictDetectedInCheckRoleExclusionsInToClass" : {
          "file" : "lib/Moose/Exception/ConflictDetectedInCheckRoleExclusionsInToClass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::ConstructClassInstanceTakesPackageName" : {
          "file" : "lib/Moose/Exception/ConstructClassInstanceTakesPackageName.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CouldNotCreateMethod" : {
          "file" : "lib/Moose/Exception/CouldNotCreateMethod.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CouldNotCreateWriter" : {
          "file" : "lib/Moose/Exception/CouldNotCreateWriter.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CouldNotEvalConstructor" : {
          "file" : "lib/Moose/Exception/CouldNotEvalConstructor.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CouldNotEvalDestructor" : {
          "file" : "lib/Moose/Exception/CouldNotEvalDestructor.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CouldNotFindTypeConstraintToCoerceFrom" : {
          "file" : "lib/Moose/Exception/CouldNotFindTypeConstraintToCoerceFrom.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CouldNotGenerateInlineAttributeMethod" : {
          "file" : "lib/Moose/Exception/CouldNotGenerateInlineAttributeMethod.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CouldNotLocateTypeConstraintForUnion" : {
          "file" : "lib/Moose/Exception/CouldNotLocateTypeConstraintForUnion.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CouldNotParseType" : {
          "file" : "lib/Moose/Exception/CouldNotParseType.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CreateMOPClassTakesArrayRefOfAttributes" : {
          "file" : "lib/Moose/Exception/CreateMOPClassTakesArrayRefOfAttributes.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CreateMOPClassTakesArrayRefOfSuperclasses" : {
          "file" : "lib/Moose/Exception/CreateMOPClassTakesArrayRefOfSuperclasses.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CreateMOPClassTakesHashRefOfMethods" : {
          "file" : "lib/Moose/Exception/CreateMOPClassTakesHashRefOfMethods.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CreateTakesArrayRefOfRoles" : {
          "file" : "lib/Moose/Exception/CreateTakesArrayRefOfRoles.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CreateTakesHashRefOfAttributes" : {
          "file" : "lib/Moose/Exception/CreateTakesHashRefOfAttributes.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::CreateTakesHashRefOfMethods" : {
          "file" : "lib/Moose/Exception/CreateTakesHashRefOfMethods.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::DefaultToMatchOnTypeMustBeCodeRef" : {
          "file" : "lib/Moose/Exception/DefaultToMatchOnTypeMustBeCodeRef.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::DelegationToAClassWhichIsNotLoaded" : {
          "file" : "lib/Moose/Exception/DelegationToAClassWhichIsNotLoaded.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::DelegationToARoleWhichIsNotLoaded" : {
          "file" : "lib/Moose/Exception/DelegationToARoleWhichIsNotLoaded.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::DelegationToATypeWhichIsNotAClass" : {
          "file" : "lib/Moose/Exception/DelegationToATypeWhichIsNotAClass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::DoesRequiresRoleName" : {
          "file" : "lib/Moose/Exception/DoesRequiresRoleName.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::EnumCalledWithAnArrayRefAndAdditionalArgs" : {
          "file" : "lib/Moose/Exception/EnumCalledWithAnArrayRefAndAdditionalArgs.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::EnumValuesMustBeString" : {
          "file" : "lib/Moose/Exception/EnumValuesMustBeString.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::ExtendsMissingArgs" : {
          "file" : "lib/Moose/Exception/ExtendsMissingArgs.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::HandlesMustBeAHashRef" : {
          "file" : "lib/Moose/Exception/HandlesMustBeAHashRef.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::IllegalInheritedOptions" : {
          "file" : "lib/Moose/Exception/IllegalInheritedOptions.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::IllegalMethodTypeToAddMethodModifier" : {
          "file" : "lib/Moose/Exception/IllegalMethodTypeToAddMethodModifier.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::IncompatibleMetaclassOfSuperclass" : {
          "file" : "lib/Moose/Exception/IncompatibleMetaclassOfSuperclass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::InitMetaRequiresClass" : {
          "file" : "lib/Moose/Exception/InitMetaRequiresClass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::InitializeTakesUnBlessedPackageName" : {
          "file" : "lib/Moose/Exception/InitializeTakesUnBlessedPackageName.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::InstanceBlessedIntoWrongClass" : {
          "file" : "lib/Moose/Exception/InstanceBlessedIntoWrongClass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::InstanceMustBeABlessedReference" : {
          "file" : "lib/Moose/Exception/InstanceMustBeABlessedReference.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::InvalidArgPassedToMooseUtilMetaRole" : {
          "file" : "lib/Moose/Exception/InvalidArgPassedToMooseUtilMetaRole.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::InvalidArgumentToMethod" : {
          "file" : "lib/Moose/Exception/InvalidArgumentToMethod.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::InvalidArgumentsToTraitAliases" : {
          "file" : "lib/Moose/Exception/InvalidArgumentsToTraitAliases.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::InvalidBaseTypeGivenToCreateParameterizedTypeConstraint" : {
          "file" : "lib/Moose/Exception/InvalidBaseTypeGivenToCreateParameterizedTypeConstraint.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::InvalidHandleValue" : {
          "file" : "lib/Moose/Exception/InvalidHandleValue.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::InvalidHasProvidedInARole" : {
          "file" : "lib/Moose/Exception/InvalidHasProvidedInARole.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::InvalidNameForType" : {
          "file" : "lib/Moose/Exception/InvalidNameForType.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
+      },
+      "Moose::Exception::InvalidOverloadOperator" : {
+         "file" : "lib/Moose/Exception/InvalidOverloadOperator.pm",
+         "version" : "2.1402"
       },
       "Moose::Exception::InvalidRoleApplication" : {
          "file" : "lib/Moose/Exception/InvalidRoleApplication.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::InvalidTypeConstraint" : {
          "file" : "lib/Moose/Exception/InvalidTypeConstraint.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::InvalidTypeGivenToCreateParameterizedTypeConstraint" : {
          "file" : "lib/Moose/Exception/InvalidTypeGivenToCreateParameterizedTypeConstraint.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::InvalidValueForIs" : {
          "file" : "lib/Moose/Exception/InvalidValueForIs.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::IsaDoesNotDoTheRole" : {
          "file" : "lib/Moose/Exception/IsaDoesNotDoTheRole.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::IsaLacksDoesMethod" : {
          "file" : "lib/Moose/Exception/IsaLacksDoesMethod.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::LazyAttributeNeedsADefault" : {
          "file" : "lib/Moose/Exception/LazyAttributeNeedsADefault.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::Legacy" : {
          "file" : "lib/Moose/Exception/Legacy.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MOPAttributeNewNeedsAttributeName" : {
          "file" : "lib/Moose/Exception/MOPAttributeNewNeedsAttributeName.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MatchActionMustBeACodeRef" : {
          "file" : "lib/Moose/Exception/MatchActionMustBeACodeRef.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MessageParameterMustBeCodeRef" : {
          "file" : "lib/Moose/Exception/MessageParameterMustBeCodeRef.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MetaclassIsAClassNotASubclassOfGivenMetaclass" : {
          "file" : "lib/Moose/Exception/MetaclassIsAClassNotASubclassOfGivenMetaclass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MetaclassIsARoleNotASubclassOfGivenMetaclass" : {
          "file" : "lib/Moose/Exception/MetaclassIsARoleNotASubclassOfGivenMetaclass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MetaclassIsNotASubclassOfGivenMetaclass" : {
          "file" : "lib/Moose/Exception/MetaclassIsNotASubclassOfGivenMetaclass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MetaclassMustBeASubclassOfMooseMetaClass" : {
          "file" : "lib/Moose/Exception/MetaclassMustBeASubclassOfMooseMetaClass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MetaclassMustBeASubclassOfMooseMetaRole" : {
          "file" : "lib/Moose/Exception/MetaclassMustBeASubclassOfMooseMetaRole.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MetaclassMustBeDerivedFromClassMOPClass" : {
          "file" : "lib/Moose/Exception/MetaclassMustBeDerivedFromClassMOPClass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MetaclassNotLoaded" : {
          "file" : "lib/Moose/Exception/MetaclassNotLoaded.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MetaclassTypeIncompatible" : {
          "file" : "lib/Moose/Exception/MetaclassTypeIncompatible.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MethodExpectedAMetaclassObject" : {
          "file" : "lib/Moose/Exception/MethodExpectedAMetaclassObject.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MethodExpectsFewerArgs" : {
          "file" : "lib/Moose/Exception/MethodExpectsFewerArgs.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MethodExpectsMoreArgs" : {
          "file" : "lib/Moose/Exception/MethodExpectsMoreArgs.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MethodModifierNeedsMethodName" : {
          "file" : "lib/Moose/Exception/MethodModifierNeedsMethodName.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MethodNameConflictInRoles" : {
          "file" : "lib/Moose/Exception/MethodNameConflictInRoles.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MethodNameNotFoundInInheritanceHierarchy" : {
          "file" : "lib/Moose/Exception/MethodNameNotFoundInInheritanceHierarchy.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MethodNameNotGiven" : {
          "file" : "lib/Moose/Exception/MethodNameNotGiven.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustDefineAMethodName" : {
          "file" : "lib/Moose/Exception/MustDefineAMethodName.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustDefineAnAttributeName" : {
          "file" : "lib/Moose/Exception/MustDefineAnAttributeName.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
+      },
+      "Moose::Exception::MustDefineAnOverloadOperator" : {
+         "file" : "lib/Moose/Exception/MustDefineAnOverloadOperator.pm",
+         "version" : "2.1402"
       },
       "Moose::Exception::MustHaveAtLeastOneValueToEnumerate" : {
          "file" : "lib/Moose/Exception/MustHaveAtLeastOneValueToEnumerate.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustPassAHashOfOptions" : {
          "file" : "lib/Moose/Exception/MustPassAHashOfOptions.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustPassAMooseMetaRoleInstanceOrSubclass" : {
          "file" : "lib/Moose/Exception/MustPassAMooseMetaRoleInstanceOrSubclass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustPassAPackageNameOrAnExistingClassMOPPackageInstance" : {
          "file" : "lib/Moose/Exception/MustPassAPackageNameOrAnExistingClassMOPPackageInstance.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustPassEvenNumberOfArguments" : {
          "file" : "lib/Moose/Exception/MustPassEvenNumberOfArguments.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustPassEvenNumberOfAttributeOptions" : {
          "file" : "lib/Moose/Exception/MustPassEvenNumberOfAttributeOptions.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustProvideANameForTheAttribute" : {
          "file" : "lib/Moose/Exception/MustProvideANameForTheAttribute.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustSpecifyAtleastOneMethod" : {
          "file" : "lib/Moose/Exception/MustSpecifyAtleastOneMethod.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustSpecifyAtleastOneRole" : {
          "file" : "lib/Moose/Exception/MustSpecifyAtleastOneRole.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustSpecifyAtleastOneRoleToApplicant" : {
          "file" : "lib/Moose/Exception/MustSpecifyAtleastOneRoleToApplicant.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustSupplyAClassMOPAttributeInstance" : {
          "file" : "lib/Moose/Exception/MustSupplyAClassMOPAttributeInstance.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustSupplyADelegateToMethod" : {
          "file" : "lib/Moose/Exception/MustSupplyADelegateToMethod.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustSupplyAMetaclass" : {
          "file" : "lib/Moose/Exception/MustSupplyAMetaclass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustSupplyAMooseMetaAttributeInstance" : {
          "file" : "lib/Moose/Exception/MustSupplyAMooseMetaAttributeInstance.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustSupplyAnAccessorTypeToConstructWith" : {
          "file" : "lib/Moose/Exception/MustSupplyAnAccessorTypeToConstructWith.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustSupplyAnAttributeToConstructWith" : {
          "file" : "lib/Moose/Exception/MustSupplyAnAttributeToConstructWith.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustSupplyArrayRefAsCurriedArguments" : {
          "file" : "lib/Moose/Exception/MustSupplyArrayRefAsCurriedArguments.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::MustSupplyPackageNameAndName" : {
          "file" : "lib/Moose/Exception/MustSupplyPackageNameAndName.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::NeedsTypeConstraintUnionForTypeCoercionUnion" : {
          "file" : "lib/Moose/Exception/NeedsTypeConstraintUnionForTypeCoercionUnion.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::NeitherAttributeNorAttributeNameIsGiven" : {
          "file" : "lib/Moose/Exception/NeitherAttributeNorAttributeNameIsGiven.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::NeitherClassNorClassNameIsGiven" : {
          "file" : "lib/Moose/Exception/NeitherClassNorClassNameIsGiven.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::NeitherRoleNorRoleNameIsGiven" : {
          "file" : "lib/Moose/Exception/NeitherRoleNorRoleNameIsGiven.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::NeitherTypeNorTypeNameIsGiven" : {
          "file" : "lib/Moose/Exception/NeitherTypeNorTypeNameIsGiven.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::NoAttributeFoundInSuperClass" : {
          "file" : "lib/Moose/Exception/NoAttributeFoundInSuperClass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::NoBodyToInitializeInAnAbstractBaseClass" : {
          "file" : "lib/Moose/Exception/NoBodyToInitializeInAnAbstractBaseClass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::NoCasesMatched" : {
          "file" : "lib/Moose/Exception/NoCasesMatched.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::NoConstraintCheckForTypeConstraint" : {
          "file" : "lib/Moose/Exception/NoConstraintCheckForTypeConstraint.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::NoDestructorClassSpecified" : {
          "file" : "lib/Moose/Exception/NoDestructorClassSpecified.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::NoImmutableTraitSpecifiedForClass" : {
          "file" : "lib/Moose/Exception/NoImmutableTraitSpecifiedForClass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::NoParentGivenToSubtype" : {
          "file" : "lib/Moose/Exception/NoParentGivenToSubtype.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::OnlyInstancesCanBeCloned" : {
          "file" : "lib/Moose/Exception/OnlyInstancesCanBeCloned.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::OperatorIsRequired" : {
          "file" : "lib/Moose/Exception/OperatorIsRequired.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
+      },
+      "Moose::Exception::OverloadConflictInSummation" : {
+         "file" : "lib/Moose/Exception/OverloadConflictInSummation.pm",
+         "version" : "2.1402"
+      },
+      "Moose::Exception::OverloadRequiresAMetaClass" : {
+         "file" : "lib/Moose/Exception/OverloadRequiresAMetaClass.pm",
+         "version" : "2.1402"
+      },
+      "Moose::Exception::OverloadRequiresAMetaMethod" : {
+         "file" : "lib/Moose/Exception/OverloadRequiresAMetaMethod.pm",
+         "version" : "2.1402"
+      },
+      "Moose::Exception::OverloadRequiresAMetaOverload" : {
+         "file" : "lib/Moose/Exception/OverloadRequiresAMetaOverload.pm",
+         "version" : "2.1402"
+      },
+      "Moose::Exception::OverloadRequiresAMethodNameOrCoderef" : {
+         "file" : "lib/Moose/Exception/OverloadRequiresAMethodNameOrCoderef.pm",
+         "version" : "2.1402"
+      },
+      "Moose::Exception::OverloadRequiresAnOperator" : {
+         "file" : "lib/Moose/Exception/OverloadRequiresAnOperator.pm",
+         "version" : "2.1402"
+      },
+      "Moose::Exception::OverloadRequiresNamesForCoderef" : {
+         "file" : "lib/Moose/Exception/OverloadRequiresNamesForCoderef.pm",
+         "version" : "2.1402"
       },
       "Moose::Exception::OverrideConflictInComposition" : {
          "file" : "lib/Moose/Exception/OverrideConflictInComposition.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::OverrideConflictInSummation" : {
          "file" : "lib/Moose/Exception/OverrideConflictInSummation.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::PackageDoesNotUseMooseExporter" : {
          "file" : "lib/Moose/Exception/PackageDoesNotUseMooseExporter.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::PackageNameAndNameParamsNotGivenToWrap" : {
          "file" : "lib/Moose/Exception/PackageNameAndNameParamsNotGivenToWrap.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::PackagesAndModulesAreNotCachable" : {
          "file" : "lib/Moose/Exception/PackagesAndModulesAreNotCachable.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::ParameterIsNotSubtypeOfParent" : {
          "file" : "lib/Moose/Exception/ParameterIsNotSubtypeOfParent.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::ReferencesAreNotAllowedAsDefault" : {
          "file" : "lib/Moose/Exception/ReferencesAreNotAllowedAsDefault.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::RequiredAttributeLacksInitialization" : {
          "file" : "lib/Moose/Exception/RequiredAttributeLacksInitialization.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::RequiredAttributeNeedsADefault" : {
          "file" : "lib/Moose/Exception/RequiredAttributeNeedsADefault.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::RequiredMethodsImportedByClass" : {
          "file" : "lib/Moose/Exception/RequiredMethodsImportedByClass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::RequiredMethodsNotImplementedByClass" : {
          "file" : "lib/Moose/Exception/RequiredMethodsNotImplementedByClass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::Role::Attribute" : {
          "file" : "lib/Moose/Exception/Role/Attribute.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::Role::AttributeName" : {
          "file" : "lib/Moose/Exception/Role/AttributeName.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::Role::Class" : {
          "file" : "lib/Moose/Exception/Role/Class.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::Role::EitherAttributeOrAttributeName" : {
          "file" : "lib/Moose/Exception/Role/EitherAttributeOrAttributeName.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::Role::Instance" : {
          "file" : "lib/Moose/Exception/Role/Instance.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
+      },
+      "Moose::Exception::Role::InstanceClass" : {
+         "file" : "lib/Moose/Exception/Role/InstanceClass.pm",
+         "version" : "2.1402"
       },
       "Moose::Exception::Role::InvalidAttributeOptions" : {
          "file" : "lib/Moose/Exception/Role/InvalidAttributeOptions.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::Role::Method" : {
          "file" : "lib/Moose/Exception/Role/Method.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::Role::ParamsHash" : {
          "file" : "lib/Moose/Exception/Role/ParamsHash.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::Role::Role" : {
          "file" : "lib/Moose/Exception/Role/Role.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::Role::RoleForCreate" : {
          "file" : "lib/Moose/Exception/Role/RoleForCreate.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::Role::RoleForCreateMOPClass" : {
          "file" : "lib/Moose/Exception/Role/RoleForCreateMOPClass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::Role::TypeConstraint" : {
          "file" : "lib/Moose/Exception/Role/TypeConstraint.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::RoleDoesTheExcludedRole" : {
          "file" : "lib/Moose/Exception/RoleDoesTheExcludedRole.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::RoleExclusionConflict" : {
          "file" : "lib/Moose/Exception/RoleExclusionConflict.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::RoleNameRequired" : {
          "file" : "lib/Moose/Exception/RoleNameRequired.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::RoleNameRequiredForMooseMetaRole" : {
          "file" : "lib/Moose/Exception/RoleNameRequiredForMooseMetaRole.pm",
-         "version" : "2.1204"
-      },
-      "Moose::Exception::RoleNamesDoNotMatch" : {
-         "file" : "lib/Moose/Exception/RoleNamesDoNotMatch.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::RolesDoNotSupportAugment" : {
          "file" : "lib/Moose/Exception/RolesDoNotSupportAugment.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::RolesDoNotSupportExtends" : {
          "file" : "lib/Moose/Exception/RolesDoNotSupportExtends.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::RolesDoNotSupportInner" : {
          "file" : "lib/Moose/Exception/RolesDoNotSupportInner.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::RolesDoNotSupportRegexReferencesForMethodModifiers" : {
          "file" : "lib/Moose/Exception/RolesDoNotSupportRegexReferencesForMethodModifiers.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::RolesInCreateTakesAnArrayRef" : {
          "file" : "lib/Moose/Exception/RolesInCreateTakesAnArrayRef.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::RolesListMustBeInstancesOfMooseMetaRole" : {
          "file" : "lib/Moose/Exception/RolesListMustBeInstancesOfMooseMetaRole.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::SingleParamsToNewMustBeHashRef" : {
          "file" : "lib/Moose/Exception/SingleParamsToNewMustBeHashRef.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::TriggerMustBeACodeRef" : {
          "file" : "lib/Moose/Exception/TriggerMustBeACodeRef.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::TypeConstraintCannotBeUsedForAParameterizableType" : {
          "file" : "lib/Moose/Exception/TypeConstraintCannotBeUsedForAParameterizableType.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::TypeConstraintIsAlreadyCreated" : {
          "file" : "lib/Moose/Exception/TypeConstraintIsAlreadyCreated.pm",
-         "version" : "2.1204"
-      },
-      "Moose::Exception::TypeNamesDoNotMatch" : {
-         "file" : "lib/Moose/Exception/TypeNamesDoNotMatch.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::TypeParameterMustBeMooseMetaType" : {
          "file" : "lib/Moose/Exception/TypeParameterMustBeMooseMetaType.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::UnableToCanonicalizeHandles" : {
          "file" : "lib/Moose/Exception/UnableToCanonicalizeHandles.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::UnableToCanonicalizeNonRolePackage" : {
          "file" : "lib/Moose/Exception/UnableToCanonicalizeNonRolePackage.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::UnableToRecognizeDelegateMetaclass" : {
          "file" : "lib/Moose/Exception/UnableToRecognizeDelegateMetaclass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::UndefinedHashKeysPassedToMethod" : {
          "file" : "lib/Moose/Exception/UndefinedHashKeysPassedToMethod.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::UnionCalledWithAnArrayRefAndAdditionalArgs" : {
          "file" : "lib/Moose/Exception/UnionCalledWithAnArrayRefAndAdditionalArgs.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::UnionTakesAtleastTwoTypeNames" : {
          "file" : "lib/Moose/Exception/UnionTakesAtleastTwoTypeNames.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::ValidationFailedForInlineTypeConstraint" : {
          "file" : "lib/Moose/Exception/ValidationFailedForInlineTypeConstraint.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::ValidationFailedForTypeConstraint" : {
          "file" : "lib/Moose/Exception/ValidationFailedForTypeConstraint.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::WrapTakesACodeRefToBless" : {
          "file" : "lib/Moose/Exception/WrapTakesACodeRefToBless.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exception::WrongTypeConstraintGiven" : {
          "file" : "lib/Moose/Exception/WrongTypeConstraintGiven.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Exporter" : {
          "file" : "lib/Moose/Exporter.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Intro" : {
          "file" : "lib/Moose/Intro.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual" : {
          "file" : "lib/Moose/Manual.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::Attributes" : {
          "file" : "lib/Moose/Manual/Attributes.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::BestPractices" : {
          "file" : "lib/Moose/Manual/BestPractices.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::Classes" : {
          "file" : "lib/Moose/Manual/Classes.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::Concepts" : {
          "file" : "lib/Moose/Manual/Concepts.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::Construction" : {
          "file" : "lib/Moose/Manual/Construction.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::Contributing" : {
          "file" : "lib/Moose/Manual/Contributing.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::Delegation" : {
          "file" : "lib/Moose/Manual/Delegation.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::Delta" : {
          "file" : "lib/Moose/Manual/Delta.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::Exceptions" : {
          "file" : "lib/Moose/Manual/Exceptions.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::Exceptions::Manifest" : {
          "file" : "lib/Moose/Manual/Exceptions/Manifest.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::FAQ" : {
          "file" : "lib/Moose/Manual/FAQ.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::MOP" : {
          "file" : "lib/Moose/Manual/MOP.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::MethodModifiers" : {
          "file" : "lib/Moose/Manual/MethodModifiers.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::MooseX" : {
          "file" : "lib/Moose/Manual/MooseX.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::Roles" : {
          "file" : "lib/Moose/Manual/Roles.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::Support" : {
          "file" : "lib/Moose/Manual/Support.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::Types" : {
          "file" : "lib/Moose/Manual/Types.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Manual::Unsweetened" : {
          "file" : "lib/Moose/Manual/Unsweetened.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Attribute" : {
          "file" : "lib/Moose/Meta/Attribute.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Attribute::Custom::Moose" : {
          "file" : "lib/Moose/Meta/Attribute.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Attribute::Native" : {
          "file" : "lib/Moose/Meta/Attribute/Native.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Attribute::Native::Trait::Array" : {
          "file" : "lib/Moose/Meta/Attribute/Native/Trait/Array.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Attribute::Native::Trait::Bool" : {
          "file" : "lib/Moose/Meta/Attribute/Native/Trait/Bool.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Attribute::Native::Trait::Code" : {
          "file" : "lib/Moose/Meta/Attribute/Native/Trait/Code.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Attribute::Native::Trait::Counter" : {
          "file" : "lib/Moose/Meta/Attribute/Native/Trait/Counter.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Attribute::Native::Trait::Hash" : {
          "file" : "lib/Moose/Meta/Attribute/Native/Trait/Hash.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Attribute::Native::Trait::Number" : {
          "file" : "lib/Moose/Meta/Attribute/Native/Trait/Number.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Attribute::Native::Trait::String" : {
          "file" : "lib/Moose/Meta/Attribute/Native/Trait/String.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Class" : {
          "file" : "lib/Moose/Meta/Class.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Instance" : {
          "file" : "lib/Moose/Meta/Instance.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Method" : {
          "file" : "lib/Moose/Meta/Method.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Method::Accessor" : {
          "file" : "lib/Moose/Meta/Method/Accessor.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Method::Augmented" : {
          "file" : "lib/Moose/Meta/Method/Augmented.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Method::Constructor" : {
          "file" : "lib/Moose/Meta/Method/Constructor.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Method::Delegation" : {
          "file" : "lib/Moose/Meta/Method/Delegation.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Method::Destructor" : {
          "file" : "lib/Moose/Meta/Method/Destructor.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Method::Meta" : {
          "file" : "lib/Moose/Meta/Method/Meta.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Method::Overridden" : {
          "file" : "lib/Moose/Meta/Method/Overridden.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Role" : {
          "file" : "lib/Moose/Meta/Role.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Role::Application" : {
          "file" : "lib/Moose/Meta/Role/Application.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Role::Application::RoleSummation" : {
          "file" : "lib/Moose/Meta/Role/Application/RoleSummation.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Role::Application::ToClass" : {
          "file" : "lib/Moose/Meta/Role/Application/ToClass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Role::Application::ToInstance" : {
          "file" : "lib/Moose/Meta/Role/Application/ToInstance.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Role::Application::ToRole" : {
          "file" : "lib/Moose/Meta/Role/Application/ToRole.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Role::Attribute" : {
          "file" : "lib/Moose/Meta/Role/Attribute.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Role::Composite" : {
          "file" : "lib/Moose/Meta/Role/Composite.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Role::Method" : {
          "file" : "lib/Moose/Meta/Role/Method.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Role::Method::Conflicting" : {
          "file" : "lib/Moose/Meta/Role/Method/Conflicting.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::Role::Method::Required" : {
          "file" : "lib/Moose/Meta/Role/Method/Required.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::TypeCoercion" : {
          "file" : "lib/Moose/Meta/TypeCoercion.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::TypeCoercion::Union" : {
          "file" : "lib/Moose/Meta/TypeCoercion/Union.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::TypeConstraint" : {
          "file" : "lib/Moose/Meta/TypeConstraint.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::TypeConstraint::Class" : {
          "file" : "lib/Moose/Meta/TypeConstraint/Class.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::TypeConstraint::DuckType" : {
          "file" : "lib/Moose/Meta/TypeConstraint/DuckType.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::TypeConstraint::Enum" : {
          "file" : "lib/Moose/Meta/TypeConstraint/Enum.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::TypeConstraint::Parameterizable" : {
          "file" : "lib/Moose/Meta/TypeConstraint/Parameterizable.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::TypeConstraint::Parameterized" : {
          "file" : "lib/Moose/Meta/TypeConstraint/Parameterized.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::TypeConstraint::Registry" : {
          "file" : "lib/Moose/Meta/TypeConstraint/Registry.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::TypeConstraint::Role" : {
          "file" : "lib/Moose/Meta/TypeConstraint/Role.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Meta::TypeConstraint::Union" : {
          "file" : "lib/Moose/Meta/TypeConstraint/Union.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Object" : {
          "file" : "lib/Moose/Object.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Role" : {
          "file" : "lib/Moose/Role.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Spec::Role" : {
          "file" : "lib/Moose/Spec/Role.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Unsweetened" : {
          "file" : "lib/Moose/Unsweetened.pod",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Util" : {
          "file" : "lib/Moose/Util.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Util::MetaRole" : {
          "file" : "lib/Moose/Util/MetaRole.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Moose::Util::TypeConstraints" : {
          "file" : "lib/Moose/Util/TypeConstraints.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "Test::Moose" : {
          "file" : "lib/Test/Moose.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "metaclass" : {
          "file" : "lib/metaclass.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       },
       "oose" : {
          "file" : "lib/oose.pm",
-         "version" : "2.1204"
+         "version" : "2.1402"
       }
    },
    "release_status" : "stable",
@@ -1569,16 +1649,16 @@
       "x_IRC" : "irc://irc.perl.org/#moose",
       "x_MailingList" : "http://lists.perl.org/list/moose.html"
    },
-   "version" : "2.1204",
+   "version" : "2.1402",
    "x_Dist_Zilla" : {
       "perl" : {
-         "version" : "5.019007"
+         "version" : "5.021005"
       },
       "plugins" : [
          {
-            "class" : "inc::RequireAuthorDeps",
-            "name" : "=inc::RequireAuthorDeps",
-            "version" : null
+            "class" : "Dist::Zilla::Plugin::EnsurePrereqsInstalled",
+            "name" : "EnsurePrereqsInstalled",
+            "version" : "0.008"
          },
          {
             "class" : "inc::Clean",
@@ -1587,106 +1667,125 @@
          },
          {
             "class" : "Dist::Zilla::Plugin::GatherDir",
+            "config" : {
+               "Dist::Zilla::Plugin::GatherDir" : {
+                  "exclude_filename" : [
+                     "Makefile.PL"
+                  ],
+                  "exclude_match" : [
+                     "^t/recipes/(?!basics_genome_overloadingsubtypesandcoercion)",
+                     "^Moose-[\\d.]+",
+                     "^nytprof.*"
+                  ],
+                  "follow_symlinks" : "0",
+                  "include_dotfiles" : "0",
+                  "prefix" : "",
+                  "prune_directory" : [
+                     "^Moose-[\\d.]+"
+                  ],
+                  "root" : "."
+               }
+            },
             "name" : "GatherDir",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::PruneCruft",
             "name" : "PruneCruft",
-            "version" : "5.012"
-         },
-         {
-            "class" : "Dist::Zilla::Plugin::ManifestSkip",
-            "name" : "ManifestSkip",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaYAML",
             "name" : "MetaYAML",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaJSON",
             "name" : "MetaJSON",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::License",
             "name" : "License",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::ExecDir",
             "name" : "ExecDir",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::ShareDir",
             "name" : "ShareDir",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "inc::MakeMaker",
+            "config" : {
+               "Dist::Zilla::Role::TestRunner" : {
+                  "default_jobs" : "9"
+               }
+            },
             "name" : "=inc::MakeMaker",
             "version" : null
          },
          {
             "class" : "Dist::Zilla::Plugin::Manifest",
             "name" : "Manifest",
-            "version" : "5.012"
-         },
-         {
-            "class" : "Dist::Zilla::Plugin::TestRelease",
-            "name" : "TestRelease",
-            "version" : "5.012"
-         },
-         {
-            "class" : "Dist::Zilla::Plugin::UploadToCPAN",
-            "name" : "UploadToCPAN",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::NextRelease",
             "name" : "NextRelease",
-            "version" : "5.012"
-         },
-         {
-            "class" : "Dist::Zilla::Plugin::PruneFiles",
-            "name" : "PruneFiles",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::PkgVersion",
             "name" : "PkgVersion",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaConfig",
             "name" : "MetaConfig",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
-            "class" : "Dist::Zilla::Plugin::Authority",
-            "name" : "Authority",
-            "version" : "1.006"
+            "class" : "inc::SimpleAuthority",
+            "name" : "=inc::SimpleAuthority",
+            "version" : null
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaResources",
             "name" : "MetaResources",
-            "version" : "5.012"
+            "version" : "5.023"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FileFinder::ByName",
+            "name" : "PodModules",
+            "version" : "5.023"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FileFinder::Filter",
+            "name" : "ModulesSansPod",
+            "version" : "5.023"
+         },
+         {
+            "class" : "inc::SimpleProvides",
+            "name" : "=inc::SimpleProvides",
+            "version" : null
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaProvides::Package",
             "config" : {
                "Dist::Zilla::Plugin::MetaProvides::Package" : {
                   "finder" : [
-                     ":InstallModules"
+                     "ModulesSansPod"
                   ],
                   "finder_objects" : [
                      {
-                        "class" : "Dist::Zilla::Plugin::FinderCode",
-                        "name" : ":InstallModules",
-                        "version" : "5.012"
+                        "class" : "Dist::Zilla::Plugin::FileFinder::Filter",
+                        "name" : "ModulesSansPod",
+                        "version" : "5.023"
                      }
                   ]
                },
@@ -1697,12 +1796,12 @@
                }
             },
             "name" : "MetaProvides::Package",
-            "version" : "2.000001"
+            "version" : "2.001002"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaNoIndex",
             "name" : "MetaNoIndex",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::SurgicalPodWeaver",
@@ -1716,82 +1815,82 @@
                      {
                         "class" : "Pod::Weaver::Plugin::EnsurePod5",
                         "name" : "@CorePrep/EnsurePod5",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Plugin::H1Nester",
                         "name" : "@CorePrep/H1Nester",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Plugin::SingleEncoding",
                         "name" : "@Default/SingleEncoding",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Name",
                         "name" : "@Default/Name",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Version",
                         "name" : "@Default/Version",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Region",
                         "name" : "@Default/prelude",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Generic",
                         "name" : "SYNOPSIS",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Generic",
                         "name" : "DESCRIPTION",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Generic",
                         "name" : "OVERVIEW",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Collect",
                         "name" : "ATTRIBUTES",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Collect",
                         "name" : "METHODS",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Collect",
                         "name" : "FUNCTIONS",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Leftovers",
                         "name" : "@Default/Leftovers",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Region",
                         "name" : "@Default/postlude",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Authors",
                         "name" : "@Default/Authors",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Legal",
                         "name" : "@Default/Legal",
-                        "version" : "4.006"
+                        "version" : "4.007"
                      }
                   ]
                }
@@ -1816,57 +1915,75 @@
                }
             },
             "name" : "PromptIfStale",
-            "version" : "0.015"
+            "version" : "0.028"
          },
          {
-            "class" : "Dist::Zilla::Plugin::EOLTests",
-            "name" : "EOLTests",
-            "version" : "0.02"
+            "class" : "Dist::Zilla::Plugin::Test::EOL",
+            "config" : {
+               "Dist::Zilla::Plugin::Test::EOL" : {
+                  "filename" : "xt/author/eol.t"
+               }
+            },
+            "name" : "Test::EOL",
+            "version" : "0.15"
          },
          {
             "class" : "Dist::Zilla::Plugin::PodSyntaxTests",
             "name" : "PodSyntaxTests",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::Test::NoTabs",
             "config" : {
                "Dist::Zilla::Plugin::Test::NoTabs" : {
-                  "module_finder" : [
-                     ":InstallModules"
-                  ],
-                  "script_finder" : [
-                     ":ExecFiles"
+                  "filename" : "xt/author/no-tabs.t",
+                  "finder" : [
+                     ":InstallModules",
+                     ":ExecFiles",
+                     ":TestFiles"
                   ]
                }
             },
             "name" : "Test::NoTabs",
-            "version" : "0.06"
+            "version" : "0.09"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaTests",
             "name" : "MetaTests",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::Test::Kwalitee",
+            "config" : {
+               "Dist::Zilla::Plugin::Test::Kwalitee" : {
+                  "filename" : "xt/release/kwalitee.t",
+                  "skiptest" : [
+                     "use_strict"
+                  ]
+               }
+            },
             "name" : "Test::Kwalitee",
-            "version" : "2.07"
+            "version" : "2.11"
          },
          {
             "class" : "Dist::Zilla::Plugin::MojibakeTests",
             "name" : "MojibakeTests",
-            "version" : "0.5"
+            "version" : "0.7"
          },
          {
             "class" : "Dist::Zilla::Plugin::RunExtraTests",
+            "config" : {
+               "Dist::Zilla::Role::TestRunner" : {
+                  "default_jobs" : "9"
+               }
+            },
             "name" : "RunExtraTests",
-            "version" : "0.016"
+            "version" : "0.024"
          },
          {
             "class" : "Dist::Zilla::Plugin::Test::ReportPrereqs",
             "name" : "Test::ReportPrereqs",
-            "version" : "0.013"
+            "version" : "0.019"
          },
          {
             "class" : "Dist::Zilla::Plugin::Test::CPAN::Changes",
@@ -1877,22 +1994,59 @@
             "class" : "Dist::Zilla::Plugin::Test::Compile",
             "config" : {
                "Dist::Zilla::Plugin::Test::Compile" : {
-                  "filename" : "xt/author/00-compile.t",
+                  "bail_out_on_fail" : "1",
+                  "fail_on_warning" : "author",
+                  "fake_home" : "0",
+                  "filename" : "xt/release/00-compile.t",
                   "module_finder" : [
                      ":InstallModules"
                   ],
+                  "needs_display" : "0",
+                  "phase" : "develop",
                   "script_finder" : [
                      ":ExecFiles"
+                  ],
+                  "skips" : [
+                     "^Class::MOP::Attribute$",
+                     "^Class::MOP::Class$",
+                     "^Class::MOP::Method::Accessor$",
+                     "^Class::MOP::Method::Constructor$",
+                     "^Class::MOP::Method::Inlined$",
+                     "^Class::MOP::Method::Wrapped$",
+                     "^Class::MOP::Mixin::HasAttributes$",
+                     "^Class::MOP::Module$",
+                     "^Class::MOP::Package$",
+                     "^Moose::Meta::Attribute$",
+                     "^Moose::Meta::Attribute::Native$",
+                     "^Moose::Meta::Mixin::AttributeCore$",
+                     "^Moose::Meta::Role::Attribute$",
+                     "^Moose::Meta::TypeConstraint::Class$",
+                     "^Moose::Meta::TypeConstraint::DuckType$",
+                     "^Moose::Meta::TypeConstraint::Enum$",
+                     "^Moose::Meta::TypeConstraint::Parameterizable$",
+                     "^Moose::Meta::TypeConstraint::Parameterized$",
+                     "^Moose::Meta::TypeConstraint::Role$",
+                     "^Moose::Meta::TypeConstraint::Union$"
                   ]
                }
             },
             "name" : "Test::Compile",
-            "version" : "2.039"
+            "version" : "2.051"
+         },
+         {
+            "class" : "inc::CheckReleaseType",
+            "name" : "=inc::CheckReleaseType",
+            "version" : null
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::CheckVersionIncrement",
+            "name" : "CheckVersionIncrement",
+            "version" : "0.121750"
          },
          {
             "class" : "Dist::Zilla::Plugin::CheckChangesHasContent",
             "name" : "CheckChangesHasContent",
-            "version" : "0.006"
+            "version" : "0.007"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -1903,7 +2057,7 @@
                }
             },
             "name" : "Prereqs",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -1914,7 +2068,7 @@
                }
             },
             "name" : "TestRequires",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -1925,12 +2079,12 @@
                }
             },
             "name" : "ConfigureRequires",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs::AuthorDeps",
             "name" : "Prereqs::AuthorDeps",
-            "version" : "0.002"
+            "version" : "0.004"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -1941,7 +2095,7 @@
                }
             },
             "name" : "DevelopRequires",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -1952,23 +2106,27 @@
                }
             },
             "name" : "RuntimeRecommends",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
-            "class" : "Dist::Zilla::Plugin::Prereqs",
+            "class" : "Dist::Zilla::Plugin::Conflicts",
+            "name" : "Conflicts",
+            "version" : "0.16"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Test::CheckBreaks",
             "config" : {
-               "Dist::Zilla::Plugin::Prereqs" : {
-                  "phase" : "develop",
-                  "type" : "conflicts"
+               "Dist::Zilla::Plugin::Test::CheckBreaks" : {
+                  "conflicts_module" : "Moose::Conflicts"
                }
             },
-            "name" : "DevelopConflicts",
-            "version" : "5.012"
+            "name" : "Test::CheckBreaks",
+            "version" : "0.011"
          },
          {
-            "class" : "Dist::Zilla::Plugin::Conflicts",
-            "name" : "Conflicts",
-            "version" : "0.13"
+            "class" : "inc::CheckAuthorDeps",
+            "name" : "=inc::CheckAuthorDeps",
+            "version" : null
          },
          {
             "class" : "inc::CheckDelta",
@@ -1983,42 +2141,133 @@
          {
             "class" : "Dist::Zilla::Plugin::Git::Remote::Check",
             "name" : "Git::Remote::Check",
-            "version" : "0.2.0"
+            "version" : "0.1.2"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::CheckFor::CorrectBranch",
+            "config" : {
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "Git::CheckFor::CorrectBranch",
-            "version" : "0.009"
+            "version" : "0.011"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Check",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Check" : {
+                  "untracked_files" : "die"
+               },
+               "Dist::Zilla::Role::Git::DirtyFiles" : {
+                  "allow_dirty" : [],
+                  "allow_dirty_match" : [],
+                  "changelog" : "Changes"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "Git::Check",
-            "version" : "2.019"
+            "version" : "2.025"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::TestRelease",
+            "name" : "TestRelease",
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::ConfirmRelease",
             "name" : "ConfirmRelease",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Commit",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Commit" : {
+                  "add_files_in" : [],
+                  "commit_msg" : "changelog for %N-%v%t",
+                  "time_zone" : "local"
+               },
+               "Dist::Zilla::Role::Git::DirtyFiles" : {
+                  "allow_dirty" : [
+                     "Changes"
+                  ],
+                  "allow_dirty_match" : [],
+                  "changelog" : "Changes"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "Git::Commit",
-            "version" : "2.019"
+            "version" : "2.025"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Tag",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Tag" : {
+                  "branch" : null,
+                  "signed" : 0,
+                  "tag" : "2.1402",
+                  "tag_format" : "%v",
+                  "tag_message" : "%v%t",
+                  "time_zone" : "local"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "Git::Tag",
-            "version" : "2.019"
+            "version" : "2.025"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Push",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Push" : {
+                  "push_to" : [
+                     "origin"
+                  ],
+                  "remotes_must_exist" : 1
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "Git::Push",
-            "version" : "2.019"
+            "version" : "2.025"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::UploadToCPAN",
+            "name" : "UploadToCPAN",
+            "version" : "5.023"
          },
          {
-            "class" : "Dist::Zilla::Plugin::ContributorsFromGit",
-            "name" : "ContributorsFromGit",
-            "version" : "0.006"
+            "class" : "Dist::Zilla::Plugin::Run::AfterRelease",
+            "config" : {
+               "Dist::Zilla::Plugin::Run::Role::Runner" : {
+                  "run" : [
+                     "git checkout master",
+                     "git merge --ff-only stable/2.14",
+                     "git push"
+                  ]
+               }
+            },
+            "name" : "Run::AfterRelease",
+            "version" : "0.026"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Git::Contributors",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Contributors" : {
+                  "include_authors" : "0",
+                  "include_releaser" : "1",
+                  "order_by" : "name",
+                  "paths" : []
+               }
+            },
+            "name" : "Git::Contributors",
+            "version" : "0.008"
          },
          {
             "class" : "inc::GenerateDocs",
@@ -2028,42 +2277,42 @@
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":InstallModules",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":IncModules",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":TestFiles",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":ExecFiles",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":ShareFiles",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":MainModule",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":AllFiles",
-            "version" : "5.012"
+            "version" : "5.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":NoFiles",
-            "version" : "5.012"
+            "version" : "5.023"
          }
       ],
       "zilla" : {
@@ -2071,96 +2320,101 @@
          "config" : {
             "is_trial" : "0"
          },
-         "version" : "5.012"
+         "version" : "5.023"
       }
    },
    "x_authority" : "cpan:STEVAN",
    "x_breaks" : {
-      "Catalyst" : "5.90049999",
-      "Config::MVP" : "2.200004",
-      "Devel::REPL" : "1.003020",
-      "Dist::Zilla::Plugin::Git" : "2.016",
-      "Fey" : "0.36",
-      "Fey::ORM" : "0.42",
-      "File::ChangeNotify" : "0.15",
-      "HTTP::Throwable" : "0.017",
-      "KiokuDB" : "0.51",
-      "Markdent" : "0.16",
-      "Mason" : "2.18",
-      "MooseX::ABC" : "0.05",
-      "MooseX::Aliases" : "0.08",
-      "MooseX::AlwaysCoerce" : "0.13",
-      "MooseX::App" : "1.22",
-      "MooseX::Attribute::Deflator" : "2.1.7",
-      "MooseX::Attribute::Dependent" : "1.1.0",
-      "MooseX::Attribute::Prototype" : "0.10",
-      "MooseX::AttributeHelpers" : "0.22",
-      "MooseX::AttributeIndexes" : "1.0.0",
-      "MooseX::AttributeInflate" : "0.02",
-      "MooseX::CascadeClearing" : "0.03",
-      "MooseX::ClassAttribute" : "0.26",
-      "MooseX::Constructor::AllErrors" : "0.021",
-      "MooseX::Declare" : "0.35",
-      "MooseX::FollowPBP" : "0.02",
-      "MooseX::Getopt" : "0.56",
-      "MooseX::HasDefaults" : "0.02",
-      "MooseX::InstanceTracking" : "0.04",
-      "MooseX::LazyRequire" : "0.06",
-      "MooseX::Meta::Attribute::Index" : "0.04",
-      "MooseX::Meta::Attribute::Lvalue" : "0.05",
-      "MooseX::Method::Signatures" : "0.44",
-      "MooseX::MethodAttributes" : "0.22",
-      "MooseX::NonMoose" : "0.24",
-      "MooseX::Object::Pluggable" : "0.0011",
-      "MooseX::POE" : "0.214",
-      "MooseX::Params::Validate" : "0.05",
-      "MooseX::PrivateSetters" : "0.03",
-      "MooseX::Role::Cmd" : "0.06",
-      "MooseX::Role::Parameterized" : "1.00",
-      "MooseX::Role::WithOverloading" : "0.07",
-      "MooseX::Runnable" : "0.03",
-      "MooseX::Scaffold" : "0.05",
-      "MooseX::SemiAffordanceAccessor" : "0.05",
-      "MooseX::SetOnce" : "0.100473",
-      "MooseX::Singleton" : "0.25",
-      "MooseX::SlurpyConstructor" : "1.1",
-      "MooseX::Storage" : "0.42",
-      "MooseX::StrictConstructor" : "0.12",
-      "MooseX::Traits" : "0.11",
-      "MooseX::Types" : "0.19",
-      "MooseX::Types::Parameterizable" : "0.05",
-      "MooseX::Types::Set::Object" : "0.03",
-      "MooseX::Types::Signal" : "1.101930",
-      "MooseX::UndefTolerant" : "0.11",
-      "PRANG" : "0.14",
-      "Pod::Elemental" : "0.093280",
-      "Pod::Weaver" : "3.101638",
-      "Reaction" : "0.002003",
-      "Test::Able" : "0.10",
-      "Test::CleanNamespaces" : "0.03",
-      "Test::Moose::More" : "0.022",
-      "Test::TempDir" : "0.05",
-      "namespace::autoclean" : "0.08"
+      "Catalyst" : "<= 5.90049999",
+      "Config::MVP" : "<= 2.200004",
+      "Devel::REPL" : "<= 1.003020",
+      "Dist::Zilla::Plugin::Git" : "<= 2.016",
+      "Fey" : "<= 0.36",
+      "Fey::ORM" : "<= 0.42",
+      "File::ChangeNotify" : "<= 0.15",
+      "HTTP::Throwable" : "<= 0.017",
+      "KiokuDB" : "<= 0.51",
+      "Markdent" : "<= 0.16",
+      "Mason" : "<= 2.18",
+      "MooseX::ABC" : "<= 0.05",
+      "MooseX::Aliases" : "<= 0.08",
+      "MooseX::AlwaysCoerce" : "<= 0.13",
+      "MooseX::App" : "<= 1.22",
+      "MooseX::Attribute::Deflator" : "<= 2.1.7",
+      "MooseX::Attribute::Dependent" : "<= 1.1.0",
+      "MooseX::Attribute::Prototype" : "<= 0.10",
+      "MooseX::AttributeHelpers" : "<= 0.22",
+      "MooseX::AttributeIndexes" : "<= 1.0.0",
+      "MooseX::AttributeInflate" : "<= 0.02",
+      "MooseX::CascadeClearing" : "<= 0.03",
+      "MooseX::ClassAttribute" : "<= 0.26",
+      "MooseX::Constructor::AllErrors" : "<= 0.021",
+      "MooseX::Declare" : "<= 0.35",
+      "MooseX::FollowPBP" : "<= 0.02",
+      "MooseX::Getopt" : "<= 0.56",
+      "MooseX::InstanceTracking" : "<= 0.04",
+      "MooseX::LazyRequire" : "<= 0.06",
+      "MooseX::Meta::Attribute::Index" : "<= 0.04",
+      "MooseX::Meta::Attribute::Lvalue" : "<= 0.05",
+      "MooseX::Method::Signatures" : "<= 0.44",
+      "MooseX::MethodAttributes" : "<= 0.22",
+      "MooseX::NonMoose" : "<= 0.24",
+      "MooseX::Object::Pluggable" : "<= 0.0011",
+      "MooseX::POE" : "<= 0.214",
+      "MooseX::Params::Validate" : "<= 0.05",
+      "MooseX::PrivateSetters" : "<= 0.03",
+      "MooseX::Role::Cmd" : "<= 0.06",
+      "MooseX::Role::Parameterized" : "<= 1.00",
+      "MooseX::Role::WithOverloading" : "<= 0.14",
+      "MooseX::Runnable" : "<= 0.03",
+      "MooseX::Scaffold" : "<= 0.05",
+      "MooseX::SemiAffordanceAccessor" : "<= 0.05",
+      "MooseX::SetOnce" : "<= 0.100473",
+      "MooseX::Singleton" : "<= 0.25",
+      "MooseX::SlurpyConstructor" : "<= 1.1",
+      "MooseX::Storage" : "<= 0.42",
+      "MooseX::StrictConstructor" : "<= 0.12",
+      "MooseX::Traits" : "<= 0.11",
+      "MooseX::Types" : "<= 0.19",
+      "MooseX::Types::Parameterizable" : "<= 0.05",
+      "MooseX::Types::Set::Object" : "<= 0.03",
+      "MooseX::Types::Signal" : "<= 1.101930",
+      "MooseX::UndefTolerant" : "<= 0.11",
+      "PRANG" : "<= 0.14",
+      "Pod::Elemental" : "<= 0.093280",
+      "Pod::Weaver" : "<= 3.101638",
+      "Reaction" : "<= 0.002003",
+      "Test::Able" : "<= 0.10",
+      "Test::CleanNamespaces" : "<= 0.03",
+      "Test::Moose::More" : "<= 0.022",
+      "Test::TempDir" : "<= 0.05",
+      "Throwable" : "<= 0.102080",
+      "namespace::autoclean" : "<= 0.08"
    },
    "x_contributors" : [
       "2shortplanks <mark@twoshortplanks.com>",
       "Aankhen <aankhen@gmail.com>",
       "Adam J. Foxson <fhoxh@pobox.com>",
       "Adam Kennedy <adamk@cpan.org>",
+      "Ævar Arnfjörð Bjarmason <avarab@gmail.com>",
       "Anders Nor Berle <berle@cpan.org>",
       "Ansgar Burchardt <ansgar@43-1.org>",
       "Aran Clary Deltac <bluefeet@cpan.org>",
       "Ash Berlin <ash@cpan.org>",
       "Brad Bowman <bsb@strategicdata.com.au>",
+      "Brendan Byrd <Perl@ResonatorSoft.org>",
       "Brian Manning <elspicyjack@gmail.com>",
+      "Chad Granum <chad.granum@dreamhost.com>",
       "Chankey Pathak <chankey007@gmail.com>",
       "Chia-liang Kao <clkao@clkao.org>",
       "Chip <chip@pobox.com>",
-      "Chris Weyl <cweyl@alumni.drew.edu>",
       "Christian Hansen <chansen@cpan.org>",
       "Christopher J. Madsen <perl@cjmweb.net>",
+      "Chris Weyl <cweyl@alumni.drew.edu>",
+      "chromatic <chromatic@wgz.org>",
       "Cory Watson <github@onemogin.com>",
       "Curtis Jewell <perl@csjewell.fastmail.us>",
+      "Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>",
       "Daisuke Maki (lestrrat) <daisuke@endeworks.jp>",
       "Dan Dascalescu <ddascaNOSPAMlescu@gmail.com>",
       "Dann <techmemo@gmail.com>",
@@ -2170,82 +2424,86 @@
       "Dylan William Hardison <dylan@hardison.net>",
       "Eric Wilhelm <ewilhelm@cpan.org>",
       "Evan Carroll <evan@dealermade.com>",
+      "franck cuny <franck@lumberjaph.net>",
       "Frew Schmidt <frioux@gmail.com>",
       "Gerda Shank <gerda.shank@gmail.com>",
+      "gfx <gfuji@cpan.org>",
       "Graham Knop <haarg@haarg.org>",
+      "gregor herrmann <gregoa@debian.org>",
       "Guillermo Roditi <groditi@gmail.com>",
+      "hakim <hakim.cassimally@gmail.com>",
       "Henry Van Styn <vanstyn@intellitree.com>",
       "Jason May <jason.a.may@gmail.com>",
       "Jay Allen <jay@endevver.com>",
       "Jay Hannah <jay@jays.net>",
       "Jay Kuri <jayk@jay-kuris-macbook.local>",
       "Jeff Bisbee <jbisbee@biz.(none)>",
-      "Jess Robinson <cpan@desert-island.me.uk>",
       "Jesse Vincent <jesse@bestpractical.com>",
+      "Jess Robinson <cpan@desert-island.me.uk>",
+      "joel <joel@fysh.org>",
       "John Douglas Porter <jdporter@cpan.org>",
       "John Goulah <jgoulah@cpan.org>",
       "John Napiorkowski <jjnapiork@cpan.org>",
       "Jonathan Rockway <jon@jrock.us>",
       "Justin DeVuyst <justin@devuyst.com>",
       "Justin Hunter <justin.d.hunter@gmail.com>",
+      "Karen Etheridge <github@froods.org>",
       "Kent Fredric <kentfredric@gmail.com>",
-      "Lars D\u026a\u1d07\u1d04\u1d0b\u1d0f\u1d21 \u8fea\u62c9\u65af <daxim@cpan.org>",
+      "Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯 <daxim@cpan.org>",
       "Leon Brocard <acme@astray.com>",
+      "Marcel Grünauer <hanekomu@gmail.com>",
       "Marc Mims <marc@questright.com>",
-      "Marcel Gr\u00fcnauer <hanekomu@gmail.com>",
       "Marcus Ramberg <marcus@nordaaker.com>",
-      "Mark A. Stratman <stratman@gmail.com>",
       "Mark Allen <mrallen1@yahoo.com>",
+      "Mark A. Stratman <stratman@gmail.com>",
       "Mateu X Hunter <hunter@missoula.org>",
-      "Matt Kraai <kraai@ftbfs.org>",
       "Matthew Horsfall <wolfsage@gmail.com>",
+      "matthof <rmhofmann@gmail.com>",
+      "Matt Kraai <kraai@ftbfs.org>",
+      "michaelr <michaelr@michaelr-laptop.(none)>",
+      "Michael Rykov <mrykov@gmail.com>",
+      "Michael Schout <mschout@gkg.net>",
       "Mike Whitaker <mike@altrion.org>",
       "Moritz Onken <onken@houseofdesign.de>",
       "Nathan Gray <kolibrie@graystudios.org>",
       "Nelo Onyiah <io1@sanger.ac.uk>",
+      "nperez <nperez@cpan.org>",
       "Olaf Alders <olaf@wundersolutions.com>",
-      "Olivier Mengu\u00e9 <dolmen@cpan.org>",
+      "Olivier Mengué <dolmen@cpan.org>",
       "Olof Johansson <olof@ethup.se>",
       "Patrick Donelan <pat@patspam.com>",
       "Paul Driver <frodwith@gmail.com>",
       "Paul Jamieson Fenwick <pjf@perltraining.com.au>",
-      "Pawe\u0142 Murias <pawelmurias@gmail.com>",
+      "Paweł Murias <pawelmurias@gmail.com>",
       "Pedro Melo <melo@simplicidade.org>",
       "Perlover <perlover@perlover.com>",
       "Peter Shangov <pshangov@yahoo.com>",
+      "Philippe Bruhat (BooK) <book@cpan.org>",
       "Phillip Smith <ps@phillipadsmith.com>",
       "Piotr Roszatycki <piotr.roszatycki@gmail.com>",
+      "pktm <pktm@users.noreply.github.com>",
       "Rafael Kitover <rkitover@cpan.org>",
       "Ricardo Signes <rjbs@cpan.org>",
-      "Robert 'phaylon' Sedlacek <rs@474.at>",
       "Robert Boone <robo4288@gmail.com>",
       "Robert Buels <rmb32@cornell.edu>",
+      "Robert 'phaylon' Sedlacek <rs@474.at>",
       "Robin V <robinsp-gmail-com@nospam.com>",
+      "rodrigolive <rodrigolive@gmail.com>",
       "Sam Vilain <sam.vilain@catalyst.net.nz>",
       "Scott McWhirter <konobi@cpan.org>",
+      "shelling <navyblueshellingford@gmail.com>",
       "Shlomi Fish <shlomif@iglu.org.il>",
       "Stefan O'Rear <stefanor@cox.net>",
+      "Thomas Sibley <tsibley@cpan.org>",
       "Todd Hepler <thepler@employees.org>",
       "Tokuhiro Matsuno <tokuhirom@gp.ath.cx>",
       "Tomas Doran <bobtfish@bobtfish.net>",
       "Tuomas Jormola <tj@solitudo.net>",
       "Upasana Shukla <me@upasana.me>",
       "Wallace Reis <reis.wallace@gmail.com>",
-      "Zachary Lome <zachary.lome@baml.com>",
-      "Zoffix Znet <cpan@zoffix.com>",
-      "chromatic <chromatic@wgz.org>",
-      "franck cuny <franck@lumberjaph.net>",
-      "gfx <gfuji@cpan.org>",
-      "gregor herrmann <gregoa@debian.org>",
-      "hakim <hakim.cassimally@gmail.com>",
-      "joel <joel@fysh.org>",
-      "matthof <rmhofmann@gmail.com>",
-      "michaelr <michaelr@michaelr-laptop.(none)>",
-      "nperez <nperez@cpan.org>",
-      "rodrigolive <rodrigolive@gmail.com>",
-      "shelling <navyblueshellingford@gmail.com>",
       "wickline <m-s-w-github@wickline.org>",
-      "\u00c6var Arnfj\u00f6r\u00f0 Bjarmason <avarab@gmail.com>"
+      "Zachary Lome <zachary.lome@baml.com>",
+      "Zoffix Znet <cpan@zoffix.com>"
    ]
 }
 
@@ -12,16 +12,22 @@ author:
   - 'Chris Prather <chris@prather.org>'
   - 'Matt S Trout <mst@shadowcat.co.uk>'
 build_requires:
+  CPAN::Meta::Check: '0.007'
+  CPAN::Meta::Requirements: '0'
+  ExtUtils::MakeMaker: '0'
+  File::Spec: '0'
+  Test::CleanNamespaces: '0.13'
   Test::Fatal: '0.001'
   Test::More: '0.88'
   Test::Requires: '0.05'
+  Test::Warnings: '0.016'
 configure_requires:
   Dist::CheckConflicts: '0.02'
   ExtUtils::CBuilder: '0.27'
-  ExtUtils::MakeMaker: '6.30'
+  ExtUtils::MakeMaker: '0'
   File::Spec: '0'
 dynamic_config: 0
-generated_by: 'Dist::Zilla version 5.012, CPAN::Meta::Converter version 2.133380'
+generated_by: 'Dist::Zilla version 5.023, CPAN::Meta::Converter version 2.142690'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -50,1021 +56,1045 @@ no_index:
 provides:
   Class::MOP:
     file: lib/Class/MOP.pm
-    version: '2.1204'
+    version: '2.1402'
   Class::MOP::Attribute:
     file: lib/Class/MOP/Attribute.pm
-    version: '2.1204'
+    version: '2.1402'
   Class::MOP::Class:
     file: lib/Class/MOP/Class.pm
-    version: '2.1204'
+    version: '2.1402'
   Class::MOP::Instance:
     file: lib/Class/MOP/Instance.pm
-    version: '2.1204'
+    version: '2.1402'
   Class::MOP::Method:
     file: lib/Class/MOP/Method.pm
-    version: '2.1204'
+    version: '2.1402'
   Class::MOP::Method::Accessor:
     file: lib/Class/MOP/Method/Accessor.pm
-    version: '2.1204'
+    version: '2.1402'
   Class::MOP::Method::Constructor:
     file: lib/Class/MOP/Method/Constructor.pm
-    version: '2.1204'
+    version: '2.1402'
   Class::MOP::Method::Generated:
     file: lib/Class/MOP/Method/Generated.pm
-    version: '2.1204'
+    version: '2.1402'
   Class::MOP::Method::Inlined:
     file: lib/Class/MOP/Method/Inlined.pm
-    version: '2.1204'
+    version: '2.1402'
   Class::MOP::Method::Meta:
     file: lib/Class/MOP/Method/Meta.pm
-    version: '2.1204'
-  Class::MOP::Method::Overload:
-    file: lib/Class/MOP/Method/Overload.pm
-    version: '2.1204'
+    version: '2.1402'
   Class::MOP::Method::Wrapped:
     file: lib/Class/MOP/Method/Wrapped.pm
-    version: '2.1204'
+    version: '2.1402'
   Class::MOP::Module:
     file: lib/Class/MOP/Module.pm
-    version: '2.1204'
+    version: '2.1402'
   Class::MOP::Object:
     file: lib/Class/MOP/Object.pm
-    version: '2.1204'
+    version: '2.1402'
+  Class::MOP::Overload:
+    file: lib/Class/MOP/Overload.pm
+    version: '2.1402'
   Class::MOP::Package:
     file: lib/Class/MOP/Package.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose:
     file: lib/Moose.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook:
     file: lib/Moose/Cookbook.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Basics::BankAccount_MethodModifiersAndSubclassing:
     file: lib/Moose/Cookbook/Basics/BankAccount_MethodModifiersAndSubclassing.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Basics::BinaryTree_AttributeFeatures:
     file: lib/Moose/Cookbook/Basics/BinaryTree_AttributeFeatures.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Basics::BinaryTree_BuilderAndLazyBuild:
     file: lib/Moose/Cookbook/Basics/BinaryTree_BuilderAndLazyBuild.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Basics::Company_Subtypes:
     file: lib/Moose/Cookbook/Basics/Company_Subtypes.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Basics::DateTime_ExtendingNonMooseParent:
     file: lib/Moose/Cookbook/Basics/DateTime_ExtendingNonMooseParent.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Basics::Document_AugmentAndInner:
     file: lib/Moose/Cookbook/Basics/Document_AugmentAndInner.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Basics::Genome_OverloadingSubtypesAndCoercion:
     file: lib/Moose/Cookbook/Basics/Genome_OverloadingSubtypesAndCoercion.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Basics::HTTP_SubtypesAndCoercion:
     file: lib/Moose/Cookbook/Basics/HTTP_SubtypesAndCoercion.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Basics::Immutable:
     file: lib/Moose/Cookbook/Basics/Immutable.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Basics::Person_BUILDARGSAndBUILD:
     file: lib/Moose/Cookbook/Basics/Person_BUILDARGSAndBUILD.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Basics::Point_AttributesAndSubclassing:
     file: lib/Moose/Cookbook/Basics/Point_AttributesAndSubclassing.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Extending::Debugging_BaseClassRole:
     file: lib/Moose/Cookbook/Extending/Debugging_BaseClassRole.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Extending::ExtensionOverview:
     file: lib/Moose/Cookbook/Extending/ExtensionOverview.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Extending::Mooseish_MooseSugar:
     file: lib/Moose/Cookbook/Extending/Mooseish_MooseSugar.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Legacy::Debugging_BaseClassReplacement:
     file: lib/Moose/Cookbook/Legacy/Debugging_BaseClassReplacement.pod
-    version: '2.1204'
+    version: '2.1402'
+  Moose::Cookbook::Legacy::Labeled_AttributeMetaclass:
+    file: lib/Moose/Cookbook/Legacy/Labeled_AttributeMetaclass.pod
+    version: '2.1402'
+  Moose::Cookbook::Legacy::Table_ClassMetaclass:
+    file: lib/Moose/Cookbook/Legacy/Table_ClassMetaclass.pod
+    version: '2.1402'
   Moose::Cookbook::Meta::GlobRef_InstanceMetaclass:
     file: lib/Moose/Cookbook/Meta/GlobRef_InstanceMetaclass.pod
-    version: '2.1204'
-  Moose::Cookbook::Meta::Labeled_AttributeMetaclass:
-    file: lib/Moose/Cookbook/Legacy/Labeled_AttributeMetaclass.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Meta::Labeled_AttributeTrait:
     file: lib/Moose/Cookbook/Meta/Labeled_AttributeTrait.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Meta::PrivateOrPublic_MethodMetaclass:
     file: lib/Moose/Cookbook/Meta/PrivateOrPublic_MethodMetaclass.pod
-    version: '2.1204'
-  Moose::Cookbook::Meta::Table_ClassMetaclass:
-    file: lib/Moose/Cookbook/Legacy/Table_ClassMetaclass.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Meta::Table_MetaclassTrait:
     file: lib/Moose/Cookbook/Meta/Table_MetaclassTrait.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Meta::WhyMeta:
     file: lib/Moose/Cookbook/Meta/WhyMeta.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Roles::ApplicationToInstance:
     file: lib/Moose/Cookbook/Roles/ApplicationToInstance.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Roles::Comparable_CodeReuse:
     file: lib/Moose/Cookbook/Roles/Comparable_CodeReuse.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Roles::Restartable_AdvancedComposition:
     file: lib/Moose/Cookbook/Roles/Restartable_AdvancedComposition.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Snack::Keywords:
     file: lib/Moose/Cookbook/Snack/Keywords.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Snack::Types:
     file: lib/Moose/Cookbook/Snack/Types.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Cookbook::Style:
     file: lib/Moose/Cookbook/Style.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception:
     file: lib/Moose/Exception.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::AccessorMustReadWrite:
     file: lib/Moose/Exception/AccessorMustReadWrite.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::AddParameterizableTypeTakesParameterizableType:
     file: lib/Moose/Exception/AddParameterizableTypeTakesParameterizableType.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::AddRoleTakesAMooseMetaRoleInstance:
     file: lib/Moose/Exception/AddRoleTakesAMooseMetaRoleInstance.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::AddRoleToARoleTakesAMooseMetaRole:
     file: lib/Moose/Exception/AddRoleToARoleTakesAMooseMetaRole.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::ApplyTakesABlessedInstance:
     file: lib/Moose/Exception/ApplyTakesABlessedInstance.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::AttachToClassNeedsAClassMOPClassInstanceOrASubclass:
     file: lib/Moose/Exception/AttachToClassNeedsAClassMOPClassInstanceOrASubclass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::AttributeConflictInRoles:
     file: lib/Moose/Exception/AttributeConflictInRoles.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::AttributeConflictInSummation:
     file: lib/Moose/Exception/AttributeConflictInSummation.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::AttributeExtensionIsNotSupportedInRoles:
     file: lib/Moose/Exception/AttributeExtensionIsNotSupportedInRoles.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::AttributeIsRequired:
     file: lib/Moose/Exception/AttributeIsRequired.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass:
     file: lib/Moose/Exception/AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::AttributeNamesDoNotMatch:
     file: lib/Moose/Exception/AttributeNamesDoNotMatch.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::AttributeValueIsNotAnObject:
     file: lib/Moose/Exception/AttributeValueIsNotAnObject.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::AttributeValueIsNotDefined:
     file: lib/Moose/Exception/AttributeValueIsNotDefined.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::AutoDeRefNeedsArrayRefOrHashRef:
     file: lib/Moose/Exception/AutoDeRefNeedsArrayRefOrHashRef.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::BadOptionFormat:
     file: lib/Moose/Exception/BadOptionFormat.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::BothBuilderAndDefaultAreNotAllowed:
     file: lib/Moose/Exception/BothBuilderAndDefaultAreNotAllowed.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::BuilderDoesNotExist:
     file: lib/Moose/Exception/BuilderDoesNotExist.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::BuilderMethodNotSupportedForAttribute:
     file: lib/Moose/Exception/BuilderMethodNotSupportedForAttribute.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::BuilderMethodNotSupportedForInlineAttribute:
     file: lib/Moose/Exception/BuilderMethodNotSupportedForInlineAttribute.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::BuilderMustBeAMethodName:
     file: lib/Moose/Exception/BuilderMustBeAMethodName.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CallingMethodOnAnImmutableInstance:
     file: lib/Moose/Exception/CallingMethodOnAnImmutableInstance.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CallingReadOnlyMethodOnAnImmutableInstance:
     file: lib/Moose/Exception/CallingReadOnlyMethodOnAnImmutableInstance.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CanExtendOnlyClasses:
     file: lib/Moose/Exception/CanExtendOnlyClasses.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CanOnlyConsumeRole:
     file: lib/Moose/Exception/CanOnlyConsumeRole.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CanOnlyWrapBlessedCode:
     file: lib/Moose/Exception/CanOnlyWrapBlessedCode.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CanReblessOnlyIntoASubclass:
     file: lib/Moose/Exception/CanReblessOnlyIntoASubclass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CanReblessOnlyIntoASuperclass:
     file: lib/Moose/Exception/CanReblessOnlyIntoASuperclass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotAddAdditionalTypeCoercionsToUnion:
     file: lib/Moose/Exception/CannotAddAdditionalTypeCoercionsToUnion.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotAddAsAnAttributeToARole:
     file: lib/Moose/Exception/CannotAddAsAnAttributeToARole.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotApplyBaseClassRolesToRole:
     file: lib/Moose/Exception/CannotApplyBaseClassRolesToRole.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotAssignValueToReadOnlyAccessor:
     file: lib/Moose/Exception/CannotAssignValueToReadOnlyAccessor.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotAugmentIfLocalMethodPresent:
     file: lib/Moose/Exception/CannotAugmentIfLocalMethodPresent.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotAugmentNoSuperMethod:
     file: lib/Moose/Exception/CannotAugmentNoSuperMethod.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotAutoDerefWithoutIsa:
     file: lib/Moose/Exception/CannotAutoDerefWithoutIsa.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotAutoDereferenceTypeConstraint:
     file: lib/Moose/Exception/CannotAutoDereferenceTypeConstraint.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotCalculateNativeType:
     file: lib/Moose/Exception/CannotCalculateNativeType.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotCallAnAbstractBaseMethod:
     file: lib/Moose/Exception/CannotCallAnAbstractBaseMethod.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotCallAnAbstractMethod:
     file: lib/Moose/Exception/CannotCallAnAbstractMethod.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotCoerceAWeakRef:
     file: lib/Moose/Exception/CannotCoerceAWeakRef.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotCoerceAttributeWhichHasNoCoercion:
     file: lib/Moose/Exception/CannotCoerceAttributeWhichHasNoCoercion.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotCreateHigherOrderTypeWithoutATypeParameter:
     file: lib/Moose/Exception/CannotCreateHigherOrderTypeWithoutATypeParameter.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresent:
     file: lib/Moose/Exception/CannotCreateMethodAliasLocalMethodIsPresent.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresentInClass:
     file: lib/Moose/Exception/CannotCreateMethodAliasLocalMethodIsPresentInClass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotDelegateLocalMethodIsPresent:
     file: lib/Moose/Exception/CannotDelegateLocalMethodIsPresent.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotDelegateWithoutIsa:
     file: lib/Moose/Exception/CannotDelegateWithoutIsa.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotFindDelegateMetaclass:
     file: lib/Moose/Exception/CannotFindDelegateMetaclass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotFindType:
     file: lib/Moose/Exception/CannotFindType.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotFindTypeGivenToMatchOnType:
     file: lib/Moose/Exception/CannotFindTypeGivenToMatchOnType.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotFixMetaclassCompatibility:
     file: lib/Moose/Exception/CannotFixMetaclassCompatibility.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotGenerateInlineConstraint:
     file: lib/Moose/Exception/CannotGenerateInlineConstraint.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotInitializeMooseMetaRoleComposite:
     file: lib/Moose/Exception/CannotInitializeMooseMetaRoleComposite.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotInlineTypeConstraintCheck:
     file: lib/Moose/Exception/CannotInlineTypeConstraintCheck.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotLocatePackageInINC:
     file: lib/Moose/Exception/CannotLocatePackageInINC.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotMakeMetaclassCompatible:
     file: lib/Moose/Exception/CannotMakeMetaclassCompatible.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotOverrideALocalMethod:
     file: lib/Moose/Exception/CannotOverrideALocalMethod.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotOverrideBodyOfMetaMethods:
     file: lib/Moose/Exception/CannotOverrideBodyOfMetaMethods.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotOverrideLocalMethodIsPresent:
     file: lib/Moose/Exception/CannotOverrideLocalMethodIsPresent.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotOverrideNoSuperMethod:
     file: lib/Moose/Exception/CannotOverrideNoSuperMethod.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotRegisterUnnamedTypeConstraint:
     file: lib/Moose/Exception/CannotRegisterUnnamedTypeConstraint.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CannotUseLazyBuildAndDefaultSimultaneously:
     file: lib/Moose/Exception/CannotUseLazyBuildAndDefaultSimultaneously.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CircularReferenceInAlso:
     file: lib/Moose/Exception/CircularReferenceInAlso.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::ClassDoesNotHaveInitMeta:
     file: lib/Moose/Exception/ClassDoesNotHaveInitMeta.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::ClassDoesTheExcludedRole:
     file: lib/Moose/Exception/ClassDoesTheExcludedRole.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::ClassNamesDoNotMatch:
     file: lib/Moose/Exception/ClassNamesDoNotMatch.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CloneObjectExpectsAnInstanceOfMetaclass:
     file: lib/Moose/Exception/CloneObjectExpectsAnInstanceOfMetaclass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CodeBlockMustBeACodeRef:
     file: lib/Moose/Exception/CodeBlockMustBeACodeRef.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CoercingWithoutCoercions:
     file: lib/Moose/Exception/CoercingWithoutCoercions.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CoercionAlreadyExists:
     file: lib/Moose/Exception/CoercionAlreadyExists.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CoercionNeedsTypeConstraint:
     file: lib/Moose/Exception/CoercionNeedsTypeConstraint.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::ConflictDetectedInCheckRoleExclusions:
     file: lib/Moose/Exception/ConflictDetectedInCheckRoleExclusions.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::ConflictDetectedInCheckRoleExclusionsInToClass:
     file: lib/Moose/Exception/ConflictDetectedInCheckRoleExclusionsInToClass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::ConstructClassInstanceTakesPackageName:
     file: lib/Moose/Exception/ConstructClassInstanceTakesPackageName.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CouldNotCreateMethod:
     file: lib/Moose/Exception/CouldNotCreateMethod.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CouldNotCreateWriter:
     file: lib/Moose/Exception/CouldNotCreateWriter.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CouldNotEvalConstructor:
     file: lib/Moose/Exception/CouldNotEvalConstructor.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CouldNotEvalDestructor:
     file: lib/Moose/Exception/CouldNotEvalDestructor.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CouldNotFindTypeConstraintToCoerceFrom:
     file: lib/Moose/Exception/CouldNotFindTypeConstraintToCoerceFrom.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CouldNotGenerateInlineAttributeMethod:
     file: lib/Moose/Exception/CouldNotGenerateInlineAttributeMethod.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CouldNotLocateTypeConstraintForUnion:
     file: lib/Moose/Exception/CouldNotLocateTypeConstraintForUnion.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CouldNotParseType:
     file: lib/Moose/Exception/CouldNotParseType.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CreateMOPClassTakesArrayRefOfAttributes:
     file: lib/Moose/Exception/CreateMOPClassTakesArrayRefOfAttributes.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CreateMOPClassTakesArrayRefOfSuperclasses:
     file: lib/Moose/Exception/CreateMOPClassTakesArrayRefOfSuperclasses.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CreateMOPClassTakesHashRefOfMethods:
     file: lib/Moose/Exception/CreateMOPClassTakesHashRefOfMethods.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CreateTakesArrayRefOfRoles:
     file: lib/Moose/Exception/CreateTakesArrayRefOfRoles.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CreateTakesHashRefOfAttributes:
     file: lib/Moose/Exception/CreateTakesHashRefOfAttributes.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::CreateTakesHashRefOfMethods:
     file: lib/Moose/Exception/CreateTakesHashRefOfMethods.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::DefaultToMatchOnTypeMustBeCodeRef:
     file: lib/Moose/Exception/DefaultToMatchOnTypeMustBeCodeRef.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::DelegationToAClassWhichIsNotLoaded:
     file: lib/Moose/Exception/DelegationToAClassWhichIsNotLoaded.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::DelegationToARoleWhichIsNotLoaded:
     file: lib/Moose/Exception/DelegationToARoleWhichIsNotLoaded.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::DelegationToATypeWhichIsNotAClass:
     file: lib/Moose/Exception/DelegationToATypeWhichIsNotAClass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::DoesRequiresRoleName:
     file: lib/Moose/Exception/DoesRequiresRoleName.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::EnumCalledWithAnArrayRefAndAdditionalArgs:
     file: lib/Moose/Exception/EnumCalledWithAnArrayRefAndAdditionalArgs.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::EnumValuesMustBeString:
     file: lib/Moose/Exception/EnumValuesMustBeString.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::ExtendsMissingArgs:
     file: lib/Moose/Exception/ExtendsMissingArgs.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::HandlesMustBeAHashRef:
     file: lib/Moose/Exception/HandlesMustBeAHashRef.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::IllegalInheritedOptions:
     file: lib/Moose/Exception/IllegalInheritedOptions.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::IllegalMethodTypeToAddMethodModifier:
     file: lib/Moose/Exception/IllegalMethodTypeToAddMethodModifier.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::IncompatibleMetaclassOfSuperclass:
     file: lib/Moose/Exception/IncompatibleMetaclassOfSuperclass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::InitMetaRequiresClass:
     file: lib/Moose/Exception/InitMetaRequiresClass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::InitializeTakesUnBlessedPackageName:
     file: lib/Moose/Exception/InitializeTakesUnBlessedPackageName.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::InstanceBlessedIntoWrongClass:
     file: lib/Moose/Exception/InstanceBlessedIntoWrongClass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::InstanceMustBeABlessedReference:
     file: lib/Moose/Exception/InstanceMustBeABlessedReference.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::InvalidArgPassedToMooseUtilMetaRole:
     file: lib/Moose/Exception/InvalidArgPassedToMooseUtilMetaRole.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::InvalidArgumentToMethod:
     file: lib/Moose/Exception/InvalidArgumentToMethod.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::InvalidArgumentsToTraitAliases:
     file: lib/Moose/Exception/InvalidArgumentsToTraitAliases.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::InvalidBaseTypeGivenToCreateParameterizedTypeConstraint:
     file: lib/Moose/Exception/InvalidBaseTypeGivenToCreateParameterizedTypeConstraint.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::InvalidHandleValue:
     file: lib/Moose/Exception/InvalidHandleValue.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::InvalidHasProvidedInARole:
     file: lib/Moose/Exception/InvalidHasProvidedInARole.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::InvalidNameForType:
     file: lib/Moose/Exception/InvalidNameForType.pm
-    version: '2.1204'
+    version: '2.1402'
+  Moose::Exception::InvalidOverloadOperator:
+    file: lib/Moose/Exception/InvalidOverloadOperator.pm
+    version: '2.1402'
   Moose::Exception::InvalidRoleApplication:
     file: lib/Moose/Exception/InvalidRoleApplication.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::InvalidTypeConstraint:
     file: lib/Moose/Exception/InvalidTypeConstraint.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::InvalidTypeGivenToCreateParameterizedTypeConstraint:
     file: lib/Moose/Exception/InvalidTypeGivenToCreateParameterizedTypeConstraint.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::InvalidValueForIs:
     file: lib/Moose/Exception/InvalidValueForIs.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::IsaDoesNotDoTheRole:
     file: lib/Moose/Exception/IsaDoesNotDoTheRole.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::IsaLacksDoesMethod:
     file: lib/Moose/Exception/IsaLacksDoesMethod.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::LazyAttributeNeedsADefault:
     file: lib/Moose/Exception/LazyAttributeNeedsADefault.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::Legacy:
     file: lib/Moose/Exception/Legacy.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MOPAttributeNewNeedsAttributeName:
     file: lib/Moose/Exception/MOPAttributeNewNeedsAttributeName.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MatchActionMustBeACodeRef:
     file: lib/Moose/Exception/MatchActionMustBeACodeRef.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MessageParameterMustBeCodeRef:
     file: lib/Moose/Exception/MessageParameterMustBeCodeRef.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MetaclassIsAClassNotASubclassOfGivenMetaclass:
     file: lib/Moose/Exception/MetaclassIsAClassNotASubclassOfGivenMetaclass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MetaclassIsARoleNotASubclassOfGivenMetaclass:
     file: lib/Moose/Exception/MetaclassIsARoleNotASubclassOfGivenMetaclass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MetaclassIsNotASubclassOfGivenMetaclass:
     file: lib/Moose/Exception/MetaclassIsNotASubclassOfGivenMetaclass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MetaclassMustBeASubclassOfMooseMetaClass:
     file: lib/Moose/Exception/MetaclassMustBeASubclassOfMooseMetaClass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MetaclassMustBeASubclassOfMooseMetaRole:
     file: lib/Moose/Exception/MetaclassMustBeASubclassOfMooseMetaRole.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MetaclassMustBeDerivedFromClassMOPClass:
     file: lib/Moose/Exception/MetaclassMustBeDerivedFromClassMOPClass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MetaclassNotLoaded:
     file: lib/Moose/Exception/MetaclassNotLoaded.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MetaclassTypeIncompatible:
     file: lib/Moose/Exception/MetaclassTypeIncompatible.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MethodExpectedAMetaclassObject:
     file: lib/Moose/Exception/MethodExpectedAMetaclassObject.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MethodExpectsFewerArgs:
     file: lib/Moose/Exception/MethodExpectsFewerArgs.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MethodExpectsMoreArgs:
     file: lib/Moose/Exception/MethodExpectsMoreArgs.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MethodModifierNeedsMethodName:
     file: lib/Moose/Exception/MethodModifierNeedsMethodName.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MethodNameConflictInRoles:
     file: lib/Moose/Exception/MethodNameConflictInRoles.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MethodNameNotFoundInInheritanceHierarchy:
     file: lib/Moose/Exception/MethodNameNotFoundInInheritanceHierarchy.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MethodNameNotGiven:
     file: lib/Moose/Exception/MethodNameNotGiven.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustDefineAMethodName:
     file: lib/Moose/Exception/MustDefineAMethodName.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustDefineAnAttributeName:
     file: lib/Moose/Exception/MustDefineAnAttributeName.pm
-    version: '2.1204'
+    version: '2.1402'
+  Moose::Exception::MustDefineAnOverloadOperator:
+    file: lib/Moose/Exception/MustDefineAnOverloadOperator.pm
+    version: '2.1402'
   Moose::Exception::MustHaveAtLeastOneValueToEnumerate:
     file: lib/Moose/Exception/MustHaveAtLeastOneValueToEnumerate.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustPassAHashOfOptions:
     file: lib/Moose/Exception/MustPassAHashOfOptions.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustPassAMooseMetaRoleInstanceOrSubclass:
     file: lib/Moose/Exception/MustPassAMooseMetaRoleInstanceOrSubclass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustPassAPackageNameOrAnExistingClassMOPPackageInstance:
     file: lib/Moose/Exception/MustPassAPackageNameOrAnExistingClassMOPPackageInstance.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustPassEvenNumberOfArguments:
     file: lib/Moose/Exception/MustPassEvenNumberOfArguments.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustPassEvenNumberOfAttributeOptions:
     file: lib/Moose/Exception/MustPassEvenNumberOfAttributeOptions.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustProvideANameForTheAttribute:
     file: lib/Moose/Exception/MustProvideANameForTheAttribute.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustSpecifyAtleastOneMethod:
     file: lib/Moose/Exception/MustSpecifyAtleastOneMethod.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustSpecifyAtleastOneRole:
     file: lib/Moose/Exception/MustSpecifyAtleastOneRole.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustSpecifyAtleastOneRoleToApplicant:
     file: lib/Moose/Exception/MustSpecifyAtleastOneRoleToApplicant.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustSupplyAClassMOPAttributeInstance:
     file: lib/Moose/Exception/MustSupplyAClassMOPAttributeInstance.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustSupplyADelegateToMethod:
     file: lib/Moose/Exception/MustSupplyADelegateToMethod.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustSupplyAMetaclass:
     file: lib/Moose/Exception/MustSupplyAMetaclass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustSupplyAMooseMetaAttributeInstance:
     file: lib/Moose/Exception/MustSupplyAMooseMetaAttributeInstance.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustSupplyAnAccessorTypeToConstructWith:
     file: lib/Moose/Exception/MustSupplyAnAccessorTypeToConstructWith.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustSupplyAnAttributeToConstructWith:
     file: lib/Moose/Exception/MustSupplyAnAttributeToConstructWith.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustSupplyArrayRefAsCurriedArguments:
     file: lib/Moose/Exception/MustSupplyArrayRefAsCurriedArguments.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::MustSupplyPackageNameAndName:
     file: lib/Moose/Exception/MustSupplyPackageNameAndName.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::NeedsTypeConstraintUnionForTypeCoercionUnion:
     file: lib/Moose/Exception/NeedsTypeConstraintUnionForTypeCoercionUnion.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::NeitherAttributeNorAttributeNameIsGiven:
     file: lib/Moose/Exception/NeitherAttributeNorAttributeNameIsGiven.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::NeitherClassNorClassNameIsGiven:
     file: lib/Moose/Exception/NeitherClassNorClassNameIsGiven.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::NeitherRoleNorRoleNameIsGiven:
     file: lib/Moose/Exception/NeitherRoleNorRoleNameIsGiven.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::NeitherTypeNorTypeNameIsGiven:
     file: lib/Moose/Exception/NeitherTypeNorTypeNameIsGiven.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::NoAttributeFoundInSuperClass:
     file: lib/Moose/Exception/NoAttributeFoundInSuperClass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::NoBodyToInitializeInAnAbstractBaseClass:
     file: lib/Moose/Exception/NoBodyToInitializeInAnAbstractBaseClass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::NoCasesMatched:
     file: lib/Moose/Exception/NoCasesMatched.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::NoConstraintCheckForTypeConstraint:
     file: lib/Moose/Exception/NoConstraintCheckForTypeConstraint.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::NoDestructorClassSpecified:
     file: lib/Moose/Exception/NoDestructorClassSpecified.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::NoImmutableTraitSpecifiedForClass:
     file: lib/Moose/Exception/NoImmutableTraitSpecifiedForClass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::NoParentGivenToSubtype:
     file: lib/Moose/Exception/NoParentGivenToSubtype.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::OnlyInstancesCanBeCloned:
     file: lib/Moose/Exception/OnlyInstancesCanBeCloned.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::OperatorIsRequired:
     file: lib/Moose/Exception/OperatorIsRequired.pm
-    version: '2.1204'
+    version: '2.1402'
+  Moose::Exception::OverloadConflictInSummation:
+    file: lib/Moose/Exception/OverloadConflictInSummation.pm
+    version: '2.1402'
+  Moose::Exception::OverloadRequiresAMetaClass:
+    file: lib/Moose/Exception/OverloadRequiresAMetaClass.pm
+    version: '2.1402'
+  Moose::Exception::OverloadRequiresAMetaMethod:
+    file: lib/Moose/Exception/OverloadRequiresAMetaMethod.pm
+    version: '2.1402'
+  Moose::Exception::OverloadRequiresAMetaOverload:
+    file: lib/Moose/Exception/OverloadRequiresAMetaOverload.pm
+    version: '2.1402'
+  Moose::Exception::OverloadRequiresAMethodNameOrCoderef:
+    file: lib/Moose/Exception/OverloadRequiresAMethodNameOrCoderef.pm
+    version: '2.1402'
+  Moose::Exception::OverloadRequiresAnOperator:
+    file: lib/Moose/Exception/OverloadRequiresAnOperator.pm
+    version: '2.1402'
+  Moose::Exception::OverloadRequiresNamesForCoderef:
+    file: lib/Moose/Exception/OverloadRequiresNamesForCoderef.pm
+    version: '2.1402'
   Moose::Exception::OverrideConflictInComposition:
     file: lib/Moose/Exception/OverrideConflictInComposition.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::OverrideConflictInSummation:
     file: lib/Moose/Exception/OverrideConflictInSummation.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::PackageDoesNotUseMooseExporter:
     file: lib/Moose/Exception/PackageDoesNotUseMooseExporter.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::PackageNameAndNameParamsNotGivenToWrap:
     file: lib/Moose/Exception/PackageNameAndNameParamsNotGivenToWrap.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::PackagesAndModulesAreNotCachable:
     file: lib/Moose/Exception/PackagesAndModulesAreNotCachable.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::ParameterIsNotSubtypeOfParent:
     file: lib/Moose/Exception/ParameterIsNotSubtypeOfParent.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::ReferencesAreNotAllowedAsDefault:
     file: lib/Moose/Exception/ReferencesAreNotAllowedAsDefault.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::RequiredAttributeLacksInitialization:
     file: lib/Moose/Exception/RequiredAttributeLacksInitialization.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::RequiredAttributeNeedsADefault:
     file: lib/Moose/Exception/RequiredAttributeNeedsADefault.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::RequiredMethodsImportedByClass:
     file: lib/Moose/Exception/RequiredMethodsImportedByClass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::RequiredMethodsNotImplementedByClass:
     file: lib/Moose/Exception/RequiredMethodsNotImplementedByClass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::Role::Attribute:
     file: lib/Moose/Exception/Role/Attribute.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::Role::AttributeName:
     file: lib/Moose/Exception/Role/AttributeName.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::Role::Class:
     file: lib/Moose/Exception/Role/Class.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::Role::EitherAttributeOrAttributeName:
     file: lib/Moose/Exception/Role/EitherAttributeOrAttributeName.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::Role::Instance:
     file: lib/Moose/Exception/Role/Instance.pm
-    version: '2.1204'
+    version: '2.1402'
+  Moose::Exception::Role::InstanceClass:
+    file: lib/Moose/Exception/Role/InstanceClass.pm
+    version: '2.1402'
   Moose::Exception::Role::InvalidAttributeOptions:
     file: lib/Moose/Exception/Role/InvalidAttributeOptions.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::Role::Method:
     file: lib/Moose/Exception/Role/Method.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::Role::ParamsHash:
     file: lib/Moose/Exception/Role/ParamsHash.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::Role::Role:
     file: lib/Moose/Exception/Role/Role.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::Role::RoleForCreate:
     file: lib/Moose/Exception/Role/RoleForCreate.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::Role::RoleForCreateMOPClass:
     file: lib/Moose/Exception/Role/RoleForCreateMOPClass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::Role::TypeConstraint:
     file: lib/Moose/Exception/Role/TypeConstraint.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::RoleDoesTheExcludedRole:
     file: lib/Moose/Exception/RoleDoesTheExcludedRole.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::RoleExclusionConflict:
     file: lib/Moose/Exception/RoleExclusionConflict.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::RoleNameRequired:
     file: lib/Moose/Exception/RoleNameRequired.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::RoleNameRequiredForMooseMetaRole:
     file: lib/Moose/Exception/RoleNameRequiredForMooseMetaRole.pm
-    version: '2.1204'
-  Moose::Exception::RoleNamesDoNotMatch:
-    file: lib/Moose/Exception/RoleNamesDoNotMatch.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::RolesDoNotSupportAugment:
     file: lib/Moose/Exception/RolesDoNotSupportAugment.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::RolesDoNotSupportExtends:
     file: lib/Moose/Exception/RolesDoNotSupportExtends.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::RolesDoNotSupportInner:
     file: lib/Moose/Exception/RolesDoNotSupportInner.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::RolesDoNotSupportRegexReferencesForMethodModifiers:
     file: lib/Moose/Exception/RolesDoNotSupportRegexReferencesForMethodModifiers.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::RolesInCreateTakesAnArrayRef:
     file: lib/Moose/Exception/RolesInCreateTakesAnArrayRef.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::RolesListMustBeInstancesOfMooseMetaRole:
     file: lib/Moose/Exception/RolesListMustBeInstancesOfMooseMetaRole.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::SingleParamsToNewMustBeHashRef:
     file: lib/Moose/Exception/SingleParamsToNewMustBeHashRef.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::TriggerMustBeACodeRef:
     file: lib/Moose/Exception/TriggerMustBeACodeRef.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::TypeConstraintCannotBeUsedForAParameterizableType:
     file: lib/Moose/Exception/TypeConstraintCannotBeUsedForAParameterizableType.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::TypeConstraintIsAlreadyCreated:
     file: lib/Moose/Exception/TypeConstraintIsAlreadyCreated.pm
-    version: '2.1204'
-  Moose::Exception::TypeNamesDoNotMatch:
-    file: lib/Moose/Exception/TypeNamesDoNotMatch.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::TypeParameterMustBeMooseMetaType:
     file: lib/Moose/Exception/TypeParameterMustBeMooseMetaType.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::UnableToCanonicalizeHandles:
     file: lib/Moose/Exception/UnableToCanonicalizeHandles.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::UnableToCanonicalizeNonRolePackage:
     file: lib/Moose/Exception/UnableToCanonicalizeNonRolePackage.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::UnableToRecognizeDelegateMetaclass:
     file: lib/Moose/Exception/UnableToRecognizeDelegateMetaclass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::UndefinedHashKeysPassedToMethod:
     file: lib/Moose/Exception/UndefinedHashKeysPassedToMethod.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::UnionCalledWithAnArrayRefAndAdditionalArgs:
     file: lib/Moose/Exception/UnionCalledWithAnArrayRefAndAdditionalArgs.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::UnionTakesAtleastTwoTypeNames:
     file: lib/Moose/Exception/UnionTakesAtleastTwoTypeNames.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::ValidationFailedForInlineTypeConstraint:
     file: lib/Moose/Exception/ValidationFailedForInlineTypeConstraint.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::ValidationFailedForTypeConstraint:
     file: lib/Moose/Exception/ValidationFailedForTypeConstraint.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::WrapTakesACodeRefToBless:
     file: lib/Moose/Exception/WrapTakesACodeRefToBless.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exception::WrongTypeConstraintGiven:
     file: lib/Moose/Exception/WrongTypeConstraintGiven.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Exporter:
     file: lib/Moose/Exporter.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Intro:
     file: lib/Moose/Intro.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual:
     file: lib/Moose/Manual.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::Attributes:
     file: lib/Moose/Manual/Attributes.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::BestPractices:
     file: lib/Moose/Manual/BestPractices.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::Classes:
     file: lib/Moose/Manual/Classes.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::Concepts:
     file: lib/Moose/Manual/Concepts.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::Construction:
     file: lib/Moose/Manual/Construction.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::Contributing:
     file: lib/Moose/Manual/Contributing.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::Delegation:
     file: lib/Moose/Manual/Delegation.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::Delta:
     file: lib/Moose/Manual/Delta.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::Exceptions:
     file: lib/Moose/Manual/Exceptions.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::Exceptions::Manifest:
     file: lib/Moose/Manual/Exceptions/Manifest.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::FAQ:
     file: lib/Moose/Manual/FAQ.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::MOP:
     file: lib/Moose/Manual/MOP.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::MethodModifiers:
     file: lib/Moose/Manual/MethodModifiers.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::MooseX:
     file: lib/Moose/Manual/MooseX.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::Roles:
     file: lib/Moose/Manual/Roles.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::Support:
     file: lib/Moose/Manual/Support.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::Types:
     file: lib/Moose/Manual/Types.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Manual::Unsweetened:
     file: lib/Moose/Manual/Unsweetened.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Attribute:
     file: lib/Moose/Meta/Attribute.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Attribute::Custom::Moose:
     file: lib/Moose/Meta/Attribute.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Attribute::Native:
     file: lib/Moose/Meta/Attribute/Native.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Attribute::Native::Trait::Array:
     file: lib/Moose/Meta/Attribute/Native/Trait/Array.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Attribute::Native::Trait::Bool:
     file: lib/Moose/Meta/Attribute/Native/Trait/Bool.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Attribute::Native::Trait::Code:
     file: lib/Moose/Meta/Attribute/Native/Trait/Code.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Attribute::Native::Trait::Counter:
     file: lib/Moose/Meta/Attribute/Native/Trait/Counter.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Attribute::Native::Trait::Hash:
     file: lib/Moose/Meta/Attribute/Native/Trait/Hash.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Attribute::Native::Trait::Number:
     file: lib/Moose/Meta/Attribute/Native/Trait/Number.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Attribute::Native::Trait::String:
     file: lib/Moose/Meta/Attribute/Native/Trait/String.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Class:
     file: lib/Moose/Meta/Class.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Instance:
     file: lib/Moose/Meta/Instance.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Method:
     file: lib/Moose/Meta/Method.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Method::Accessor:
     file: lib/Moose/Meta/Method/Accessor.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Method::Augmented:
     file: lib/Moose/Meta/Method/Augmented.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Method::Constructor:
     file: lib/Moose/Meta/Method/Constructor.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Method::Delegation:
     file: lib/Moose/Meta/Method/Delegation.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Method::Destructor:
     file: lib/Moose/Meta/Method/Destructor.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Method::Meta:
     file: lib/Moose/Meta/Method/Meta.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Method::Overridden:
     file: lib/Moose/Meta/Method/Overridden.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Role:
     file: lib/Moose/Meta/Role.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Role::Application:
     file: lib/Moose/Meta/Role/Application.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Role::Application::RoleSummation:
     file: lib/Moose/Meta/Role/Application/RoleSummation.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Role::Application::ToClass:
     file: lib/Moose/Meta/Role/Application/ToClass.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Role::Application::ToInstance:
     file: lib/Moose/Meta/Role/Application/ToInstance.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Role::Application::ToRole:
     file: lib/Moose/Meta/Role/Application/ToRole.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Role::Attribute:
     file: lib/Moose/Meta/Role/Attribute.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Role::Composite:
     file: lib/Moose/Meta/Role/Composite.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Role::Method:
     file: lib/Moose/Meta/Role/Method.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Role::Method::Conflicting:
     file: lib/Moose/Meta/Role/Method/Conflicting.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::Role::Method::Required:
     file: lib/Moose/Meta/Role/Method/Required.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::TypeCoercion:
     file: lib/Moose/Meta/TypeCoercion.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::TypeCoercion::Union:
     file: lib/Moose/Meta/TypeCoercion/Union.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::TypeConstraint:
     file: lib/Moose/Meta/TypeConstraint.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::TypeConstraint::Class:
     file: lib/Moose/Meta/TypeConstraint/Class.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::TypeConstraint::DuckType:
     file: lib/Moose/Meta/TypeConstraint/DuckType.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::TypeConstraint::Enum:
     file: lib/Moose/Meta/TypeConstraint/Enum.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::TypeConstraint::Parameterizable:
     file: lib/Moose/Meta/TypeConstraint/Parameterizable.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::TypeConstraint::Parameterized:
     file: lib/Moose/Meta/TypeConstraint/Parameterized.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::TypeConstraint::Registry:
     file: lib/Moose/Meta/TypeConstraint/Registry.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::TypeConstraint::Role:
     file: lib/Moose/Meta/TypeConstraint/Role.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Meta::TypeConstraint::Union:
     file: lib/Moose/Meta/TypeConstraint/Union.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Object:
     file: lib/Moose/Object.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Role:
     file: lib/Moose/Role.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Spec::Role:
     file: lib/Moose/Spec/Role.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Unsweetened:
     file: lib/Moose/Unsweetened.pod
-    version: '2.1204'
+    version: '2.1402'
   Moose::Util:
     file: lib/Moose/Util.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Util::MetaRole:
     file: lib/Moose/Util/MetaRole.pm
-    version: '2.1204'
+    version: '2.1402'
   Moose::Util::TypeConstraints:
     file: lib/Moose/Util/TypeConstraints.pm
-    version: '2.1204'
+    version: '2.1402'
   Test::Moose:
     file: lib/Test/Moose.pm
-    version: '2.1204'
+    version: '2.1402'
   metaclass:
     file: lib/metaclass.pm
-    version: '2.1204'
+    version: '2.1402'
   oose:
     file: lib/oose.pm
-    version: '2.1204'
+    version: '2.1402'
 recommends:
   Devel::PartialDump: '0.14'
 requires:
@@ -1073,12 +1103,15 @@ requires:
   Class::Load::XS: '0.01'
   Data::OptList: '0.107'
   Devel::GlobalDestruction: '0'
-  Devel::StackTrace: '1.30'
+  Devel::OverloadInfo: '0.002'
+  Devel::StackTrace: '1.33'
   Dist::CheckConflicts: '0.02'
   Eval::Closure: '0.04'
   List::MoreUtils: '0.28'
+  List::Util: '1.33'
   MRO::Compat: '0.05'
   Module::Runtime: '0.014'
+  Module::Runtime::Conflicts: '0'
   Package::DeprecationManager: '0.11'
   Package::Stash: '0.32'
   Package::Stash::XS: '0.24'
@@ -1090,118 +1123,133 @@ requires:
   Try::Tiny: '0.02'
   parent: '0.223'
   perl: v5.8.3
+  strict: '1.03'
+  warnings: '1.03'
 resources:
   IRC: irc://irc.perl.org/#moose
   MailingList: http://lists.perl.org/list/moose.html
   bugtracker: https://rt.cpan.org/Dist/Display.html?Name=Moose
   homepage: http://moose.perl.org/
   repository: git://github.com/moose/Moose.git
-version: '2.1204'
+version: '2.1402'
 x_Dist_Zilla:
   perl:
-    version: '5.019007'
+    version: '5.021005'
   plugins:
     -
-      class: inc::RequireAuthorDeps
-      name: =inc::RequireAuthorDeps
-      version: ~
+      class: Dist::Zilla::Plugin::EnsurePrereqsInstalled
+      name: EnsurePrereqsInstalled
+      version: '0.008'
     -
       class: inc::Clean
       name: =inc::Clean
       version: ~
     -
       class: Dist::Zilla::Plugin::GatherDir
+      config:
+        Dist::Zilla::Plugin::GatherDir:
+          exclude_filename:
+            - Makefile.PL
+          exclude_match:
+            - ^t/recipes/(?!basics_genome_overloadingsubtypesandcoercion)
+            - ^Moose-[\d.]+
+            - ^nytprof.*
+          follow_symlinks: '0'
+          include_dotfiles: '0'
+          prefix: ''
+          prune_directory:
+            - ^Moose-[\d.]+
+          root: .
       name: GatherDir
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::PruneCruft
       name: PruneCruft
-      version: '5.012'
-    -
-      class: Dist::Zilla::Plugin::ManifestSkip
-      name: ManifestSkip
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::MetaYAML
       name: MetaYAML
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::MetaJSON
       name: MetaJSON
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::License
       name: License
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::ExecDir
       name: ExecDir
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::ShareDir
       name: ShareDir
-      version: '5.012'
+      version: '5.023'
     -
       class: inc::MakeMaker
+      config:
+        Dist::Zilla::Role::TestRunner:
+          default_jobs: '9'
       name: =inc::MakeMaker
       version: ~
     -
       class: Dist::Zilla::Plugin::Manifest
       name: Manifest
-      version: '5.012'
-    -
-      class: Dist::Zilla::Plugin::TestRelease
-      name: TestRelease
-      version: '5.012'
-    -
-      class: Dist::Zilla::Plugin::UploadToCPAN
-      name: UploadToCPAN
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::NextRelease
       name: NextRelease
-      version: '5.012'
-    -
-      class: Dist::Zilla::Plugin::PruneFiles
-      name: PruneFiles
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::PkgVersion
       name: PkgVersion
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::MetaConfig
       name: MetaConfig
-      version: '5.012'
+      version: '5.023'
     -
-      class: Dist::Zilla::Plugin::Authority
-      name: Authority
-      version: '1.006'
+      class: inc::SimpleAuthority
+      name: =inc::SimpleAuthority
+      version: ~
     -
       class: Dist::Zilla::Plugin::MetaResources
       name: MetaResources
-      version: '5.012'
+      version: '5.023'
+    -
+      class: Dist::Zilla::Plugin::FileFinder::ByName
+      name: PodModules
+      version: '5.023'
+    -
+      class: Dist::Zilla::Plugin::FileFinder::Filter
+      name: ModulesSansPod
+      version: '5.023'
+    -
+      class: inc::SimpleProvides
+      name: =inc::SimpleProvides
+      version: ~
     -
       class: Dist::Zilla::Plugin::MetaProvides::Package
       config:
         Dist::Zilla::Plugin::MetaProvides::Package:
           finder:
-            - ':InstallModules'
+            - ModulesSansPod
           finder_objects:
             -
-              class: Dist::Zilla::Plugin::FinderCode
-              name: ':InstallModules'
-              version: '5.012'
+              class: Dist::Zilla::Plugin::FileFinder::Filter
+              name: ModulesSansPod
+              version: '5.023'
         Dist::Zilla::Role::MetaProvider::Provider:
           inherit_missing: '1'
           inherit_version: '1'
           meta_noindex: '1'
       name: MetaProvides::Package
-      version: '2.000001'
+      version: '2.001002'
     -
       class: Dist::Zilla::Plugin::MetaNoIndex
       name: MetaNoIndex
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::SurgicalPodWeaver
       config:
@@ -1213,67 +1261,67 @@ x_Dist_Zilla:
             -
               class: Pod::Weaver::Plugin::EnsurePod5
               name: '@CorePrep/EnsurePod5'
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Plugin::H1Nester
               name: '@CorePrep/H1Nester'
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Plugin::SingleEncoding
               name: '@Default/SingleEncoding'
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Section::Name
               name: '@Default/Name'
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Section::Version
               name: '@Default/Version'
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Section::Region
               name: '@Default/prelude'
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Section::Generic
               name: SYNOPSIS
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Section::Generic
               name: DESCRIPTION
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Section::Generic
               name: OVERVIEW
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Section::Collect
               name: ATTRIBUTES
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Section::Collect
               name: METHODS
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Section::Collect
               name: FUNCTIONS
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Section::Leftovers
               name: '@Default/Leftovers'
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Section::Region
               name: '@Default/postlude'
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Section::Authors
               name: '@Default/Authors'
-              version: '4.006'
+              version: '4.007'
             -
               class: Pod::Weaver::Section::Legal
               name: '@Default/Legal'
-              version: '4.006'
+              version: '4.007'
       name: SurgicalPodWeaver
       version: '0.0021'
     -
@@ -1290,45 +1338,57 @@ x_Dist_Zilla:
           phase: release
           skip: []
       name: PromptIfStale
-      version: '0.015'
+      version: '0.028'
     -
-      class: Dist::Zilla::Plugin::EOLTests
-      name: EOLTests
-      version: '0.02'
+      class: Dist::Zilla::Plugin::Test::EOL
+      config:
+        Dist::Zilla::Plugin::Test::EOL:
+          filename: xt/author/eol.t
+      name: Test::EOL
+      version: '0.15'
     -
       class: Dist::Zilla::Plugin::PodSyntaxTests
       name: PodSyntaxTests
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::Test::NoTabs
       config:
         Dist::Zilla::Plugin::Test::NoTabs:
-          module_finder:
+          filename: xt/author/no-tabs.t
+          finder:
             - ':InstallModules'
-          script_finder:
             - ':ExecFiles'
+            - ':TestFiles'
       name: Test::NoTabs
-      version: '0.06'
+      version: '0.09'
     -
       class: Dist::Zilla::Plugin::MetaTests
       name: MetaTests
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::Test::Kwalitee
+      config:
+        Dist::Zilla::Plugin::Test::Kwalitee:
+          filename: xt/release/kwalitee.t
+          skiptest:
+            - use_strict
       name: Test::Kwalitee
-      version: '2.07'
+      version: '2.11'
     -
       class: Dist::Zilla::Plugin::MojibakeTests
       name: MojibakeTests
-      version: '0.5'
+      version: '0.7'
     -
       class: Dist::Zilla::Plugin::RunExtraTests
+      config:
+        Dist::Zilla::Role::TestRunner:
+          default_jobs: '9'
       name: RunExtraTests
-      version: '0.016'
+      version: '0.024'
     -
       class: Dist::Zilla::Plugin::Test::ReportPrereqs
       name: Test::ReportPrereqs
-      version: '0.013'
+      version: '0.019'
     -
       class: Dist::Zilla::Plugin::Test::CPAN::Changes
       name: Test::CPAN::Changes
@@ -1337,17 +1397,51 @@ x_Dist_Zilla:
       class: Dist::Zilla::Plugin::Test::Compile
       config:
         Dist::Zilla::Plugin::Test::Compile:
-          filename: xt/author/00-compile.t
+          bail_out_on_fail: '1'
+          fail_on_warning: author
+          fake_home: '0'
+          filename: xt/release/00-compile.t
           module_finder:
             - ':InstallModules'
+          needs_display: '0'
+          phase: develop
           script_finder:
             - ':ExecFiles'
+          skips:
+            - ^Class::MOP::Attribute$
+            - ^Class::MOP::Class$
+            - ^Class::MOP::Method::Accessor$
+            - ^Class::MOP::Method::Constructor$
+            - ^Class::MOP::Method::Inlined$
+            - ^Class::MOP::Method::Wrapped$
+            - ^Class::MOP::Mixin::HasAttributes$
+            - ^Class::MOP::Module$
+            - ^Class::MOP::Package$
+            - ^Moose::Meta::Attribute$
+            - ^Moose::Meta::Attribute::Native$
+            - ^Moose::Meta::Mixin::AttributeCore$
+            - ^Moose::Meta::Role::Attribute$
+            - ^Moose::Meta::TypeConstraint::Class$
+            - ^Moose::Meta::TypeConstraint::DuckType$
+            - ^Moose::Meta::TypeConstraint::Enum$
+            - ^Moose::Meta::TypeConstraint::Parameterizable$
+            - ^Moose::Meta::TypeConstraint::Parameterized$
+            - ^Moose::Meta::TypeConstraint::Role$
+            - ^Moose::Meta::TypeConstraint::Union$
       name: Test::Compile
-      version: '2.039'
+      version: '2.051'
+    -
+      class: inc::CheckReleaseType
+      name: =inc::CheckReleaseType
+      version: ~
+    -
+      class: Dist::Zilla::Plugin::CheckVersionIncrement
+      name: CheckVersionIncrement
+      version: '0.121750'
     -
       class: Dist::Zilla::Plugin::CheckChangesHasContent
       name: CheckChangesHasContent
-      version: '0.006'
+      version: '0.007'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
@@ -1355,7 +1449,7 @@ x_Dist_Zilla:
           phase: runtime
           type: requires
       name: Prereqs
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
@@ -1363,7 +1457,7 @@ x_Dist_Zilla:
           phase: test
           type: requires
       name: TestRequires
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
@@ -1371,11 +1465,11 @@ x_Dist_Zilla:
           phase: configure
           type: requires
       name: ConfigureRequires
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::Prereqs::AuthorDeps
       name: Prereqs::AuthorDeps
-      version: '0.002'
+      version: '0.004'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
@@ -1383,7 +1477,7 @@ x_Dist_Zilla:
           phase: develop
           type: requires
       name: DevelopRequires
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
@@ -1391,19 +1485,22 @@ x_Dist_Zilla:
           phase: runtime
           type: recommends
       name: RuntimeRecommends
-      version: '5.012'
-    -
-      class: Dist::Zilla::Plugin::Prereqs
-      config:
-        Dist::Zilla::Plugin::Prereqs:
-          phase: develop
-          type: conflicts
-      name: DevelopConflicts
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::Conflicts
       name: Conflicts
-      version: '0.13'
+      version: '0.16'
+    -
+      class: Dist::Zilla::Plugin::Test::CheckBreaks
+      config:
+        Dist::Zilla::Plugin::Test::CheckBreaks:
+          conflicts_module: Moose::Conflicts
+      name: Test::CheckBreaks
+      version: '0.011'
+    -
+      class: inc::CheckAuthorDeps
+      name: =inc::CheckAuthorDeps
+      version: ~
     -
       class: inc::CheckDelta
       name: =inc::CheckDelta
@@ -1415,35 +1512,100 @@ x_Dist_Zilla:
     -
       class: Dist::Zilla::Plugin::Git::Remote::Check
       name: Git::Remote::Check
-      version: 0.2.0
+      version: 0.1.2
     -
       class: Dist::Zilla::Plugin::Git::CheckFor::CorrectBranch
+      config:
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: Git::CheckFor::CorrectBranch
-      version: '0.009'
+      version: '0.011'
     -
       class: Dist::Zilla::Plugin::Git::Check
+      config:
+        Dist::Zilla::Plugin::Git::Check:
+          untracked_files: die
+        Dist::Zilla::Role::Git::DirtyFiles:
+          allow_dirty: []
+          allow_dirty_match: []
+          changelog: Changes
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: Git::Check
-      version: '2.019'
+      version: '2.025'
+    -
+      class: Dist::Zilla::Plugin::TestRelease
+      name: TestRelease
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::ConfirmRelease
       name: ConfirmRelease
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::Git::Commit
+      config:
+        Dist::Zilla::Plugin::Git::Commit:
+          add_files_in: []
+          commit_msg: 'changelog for %N-%v%t'
+          time_zone: local
+        Dist::Zilla::Role::Git::DirtyFiles:
+          allow_dirty:
+            - Changes
+          allow_dirty_match: []
+          changelog: Changes
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: Git::Commit
-      version: '2.019'
+      version: '2.025'
     -
       class: Dist::Zilla::Plugin::Git::Tag
+      config:
+        Dist::Zilla::Plugin::Git::Tag:
+          branch: ~
+          signed: 0
+          tag: '2.1402'
+          tag_format: '%v'
+          tag_message: '%v%t'
+          time_zone: local
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: Git::Tag
-      version: '2.019'
+      version: '2.025'
     -
       class: Dist::Zilla::Plugin::Git::Push
+      config:
+        Dist::Zilla::Plugin::Git::Push:
+          push_to:
+            - origin
+          remotes_must_exist: 1
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: Git::Push
-      version: '2.019'
+      version: '2.025'
+    -
+      class: Dist::Zilla::Plugin::UploadToCPAN
+      name: UploadToCPAN
+      version: '5.023'
+    -
+      class: Dist::Zilla::Plugin::Run::AfterRelease
+      config:
+        Dist::Zilla::Plugin::Run::Role::Runner:
+          run:
+            - 'git checkout master'
+            - 'git merge --ff-only stable/2.14'
+            - 'git push'
+      name: Run::AfterRelease
+      version: '0.026'
     -
-      class: Dist::Zilla::Plugin::ContributorsFromGit
-      name: ContributorsFromGit
-      version: '0.006'
+      class: Dist::Zilla::Plugin::Git::Contributors
+      config:
+        Dist::Zilla::Plugin::Git::Contributors:
+          include_authors: '0'
+          include_releaser: '1'
+          order_by: name
+          paths: []
+      name: Git::Contributors
+      version: '0.008'
     -
       class: inc::GenerateDocs
       name: =inc::GenerateDocs
@@ -1451,126 +1613,131 @@ x_Dist_Zilla:
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':InstallModules'
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':IncModules'
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':TestFiles'
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':ExecFiles'
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':ShareFiles'
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':MainModule'
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':AllFiles'
-      version: '5.012'
+      version: '5.023'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':NoFiles'
-      version: '5.012'
+      version: '5.023'
   zilla:
     class: Dist::Zilla::Dist::Builder
     config:
       is_trial: '0'
-    version: '5.012'
+    version: '5.023'
 x_authority: cpan:STEVAN
 x_breaks:
-  Catalyst: '5.90049999'
-  Config::MVP: '2.200004'
-  Devel::REPL: '1.003020'
-  Dist::Zilla::Plugin::Git: '2.016'
-  Fey: '0.36'
-  Fey::ORM: '0.42'
-  File::ChangeNotify: '0.15'
-  HTTP::Throwable: '0.017'
-  KiokuDB: '0.51'
-  Markdent: '0.16'
-  Mason: '2.18'
-  MooseX::ABC: '0.05'
-  MooseX::Aliases: '0.08'
-  MooseX::AlwaysCoerce: '0.13'
-  MooseX::App: '1.22'
-  MooseX::Attribute::Deflator: 2.1.7
-  MooseX::Attribute::Dependent: 1.1.0
-  MooseX::Attribute::Prototype: '0.10'
-  MooseX::AttributeHelpers: '0.22'
-  MooseX::AttributeIndexes: 1.0.0
-  MooseX::AttributeInflate: '0.02'
-  MooseX::CascadeClearing: '0.03'
-  MooseX::ClassAttribute: '0.26'
-  MooseX::Constructor::AllErrors: '0.021'
-  MooseX::Declare: '0.35'
-  MooseX::FollowPBP: '0.02'
-  MooseX::Getopt: '0.56'
-  MooseX::HasDefaults: '0.02'
-  MooseX::InstanceTracking: '0.04'
-  MooseX::LazyRequire: '0.06'
-  MooseX::Meta::Attribute::Index: '0.04'
-  MooseX::Meta::Attribute::Lvalue: '0.05'
-  MooseX::Method::Signatures: '0.44'
-  MooseX::MethodAttributes: '0.22'
-  MooseX::NonMoose: '0.24'
-  MooseX::Object::Pluggable: '0.0011'
-  MooseX::POE: '0.214'
-  MooseX::Params::Validate: '0.05'
-  MooseX::PrivateSetters: '0.03'
-  MooseX::Role::Cmd: '0.06'
-  MooseX::Role::Parameterized: '1.00'
-  MooseX::Role::WithOverloading: '0.07'
-  MooseX::Runnable: '0.03'
-  MooseX::Scaffold: '0.05'
-  MooseX::SemiAffordanceAccessor: '0.05'
-  MooseX::SetOnce: '0.100473'
-  MooseX::Singleton: '0.25'
-  MooseX::SlurpyConstructor: '1.1'
-  MooseX::Storage: '0.42'
-  MooseX::StrictConstructor: '0.12'
-  MooseX::Traits: '0.11'
-  MooseX::Types: '0.19'
-  MooseX::Types::Parameterizable: '0.05'
-  MooseX::Types::Set::Object: '0.03'
-  MooseX::Types::Signal: '1.101930'
-  MooseX::UndefTolerant: '0.11'
-  PRANG: '0.14'
-  Pod::Elemental: '0.093280'
-  Pod::Weaver: '3.101638'
-  Reaction: '0.002003'
-  Test::Able: '0.10'
-  Test::CleanNamespaces: '0.03'
-  Test::Moose::More: '0.022'
-  Test::TempDir: '0.05'
-  namespace::autoclean: '0.08'
+  Catalyst: '<= 5.90049999'
+  Config::MVP: '<= 2.200004'
+  Devel::REPL: '<= 1.003020'
+  Dist::Zilla::Plugin::Git: '<= 2.016'
+  Fey: '<= 0.36'
+  Fey::ORM: '<= 0.42'
+  File::ChangeNotify: '<= 0.15'
+  HTTP::Throwable: '<= 0.017'
+  KiokuDB: '<= 0.51'
+  Markdent: '<= 0.16'
+  Mason: '<= 2.18'
+  MooseX::ABC: '<= 0.05'
+  MooseX::Aliases: '<= 0.08'
+  MooseX::AlwaysCoerce: '<= 0.13'
+  MooseX::App: '<= 1.22'
+  MooseX::Attribute::Deflator: '<= 2.1.7'
+  MooseX::Attribute::Dependent: '<= 1.1.0'
+  MooseX::Attribute::Prototype: '<= 0.10'
+  MooseX::AttributeHelpers: '<= 0.22'
+  MooseX::AttributeIndexes: '<= 1.0.0'
+  MooseX::AttributeInflate: '<= 0.02'
+  MooseX::CascadeClearing: '<= 0.03'
+  MooseX::ClassAttribute: '<= 0.26'
+  MooseX::Constructor::AllErrors: '<= 0.021'
+  MooseX::Declare: '<= 0.35'
+  MooseX::FollowPBP: '<= 0.02'
+  MooseX::Getopt: '<= 0.56'
+  MooseX::InstanceTracking: '<= 0.04'
+  MooseX::LazyRequire: '<= 0.06'
+  MooseX::Meta::Attribute::Index: '<= 0.04'
+  MooseX::Meta::Attribute::Lvalue: '<= 0.05'
+  MooseX::Method::Signatures: '<= 0.44'
+  MooseX::MethodAttributes: '<= 0.22'
+  MooseX::NonMoose: '<= 0.24'
+  MooseX::Object::Pluggable: '<= 0.0011'
+  MooseX::POE: '<= 0.214'
+  MooseX::Params::Validate: '<= 0.05'
+  MooseX::PrivateSetters: '<= 0.03'
+  MooseX::Role::Cmd: '<= 0.06'
+  MooseX::Role::Parameterized: '<= 1.00'
+  MooseX::Role::WithOverloading: '<= 0.14'
+  MooseX::Runnable: '<= 0.03'
+  MooseX::Scaffold: '<= 0.05'
+  MooseX::SemiAffordanceAccessor: '<= 0.05'
+  MooseX::SetOnce: '<= 0.100473'
+  MooseX::Singleton: '<= 0.25'
+  MooseX::SlurpyConstructor: '<= 1.1'
+  MooseX::Storage: '<= 0.42'
+  MooseX::StrictConstructor: '<= 0.12'
+  MooseX::Traits: '<= 0.11'
+  MooseX::Types: '<= 0.19'
+  MooseX::Types::Parameterizable: '<= 0.05'
+  MooseX::Types::Set::Object: '<= 0.03'
+  MooseX::Types::Signal: '<= 1.101930'
+  MooseX::UndefTolerant: '<= 0.11'
+  PRANG: '<= 0.14'
+  Pod::Elemental: '<= 0.093280'
+  Pod::Weaver: '<= 3.101638'
+  Reaction: '<= 0.002003'
+  Test::Able: '<= 0.10'
+  Test::CleanNamespaces: '<= 0.03'
+  Test::Moose::More: '<= 0.022'
+  Test::TempDir: '<= 0.05'
+  Throwable: '<= 0.102080'
+  namespace::autoclean: '<= 0.08'
 x_contributors:
   - '2shortplanks <mark@twoshortplanks.com>'
   - 'Aankhen <aankhen@gmail.com>'
   - 'Adam J. Foxson <fhoxh@pobox.com>'
   - 'Adam Kennedy <adamk@cpan.org>'
+  - 'Ævar Arnfjörð Bjarmason <avarab@gmail.com>'
   - 'Anders Nor Berle <berle@cpan.org>'
   - 'Ansgar Burchardt <ansgar@43-1.org>'
   - 'Aran Clary Deltac <bluefeet@cpan.org>'
   - 'Ash Berlin <ash@cpan.org>'
   - 'Brad Bowman <bsb@strategicdata.com.au>'
+  - 'Brendan Byrd <Perl@ResonatorSoft.org>'
   - 'Brian Manning <elspicyjack@gmail.com>'
+  - 'Chad Granum <chad.granum@dreamhost.com>'
   - 'Chankey Pathak <chankey007@gmail.com>'
   - 'Chia-liang Kao <clkao@clkao.org>'
   - 'Chip <chip@pobox.com>'
-  - 'Chris Weyl <cweyl@alumni.drew.edu>'
   - 'Christian Hansen <chansen@cpan.org>'
   - 'Christopher J. Madsen <perl@cjmweb.net>'
+  - 'Chris Weyl <cweyl@alumni.drew.edu>'
+  - 'chromatic <chromatic@wgz.org>'
   - 'Cory Watson <github@onemogin.com>'
   - 'Curtis Jewell <perl@csjewell.fastmail.us>'
+  - 'Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>'
   - 'Daisuke Maki (lestrrat) <daisuke@endeworks.jp>'
   - 'Dan Dascalescu <ddascaNOSPAMlescu@gmail.com>'
   - 'Dann <techmemo@gmail.com>'
@@ -1580,39 +1747,50 @@ x_contributors:
   - 'Dylan William Hardison <dylan@hardison.net>'
   - 'Eric Wilhelm <ewilhelm@cpan.org>'
   - 'Evan Carroll <evan@dealermade.com>'
+  - 'franck cuny <franck@lumberjaph.net>'
   - 'Frew Schmidt <frioux@gmail.com>'
   - 'Gerda Shank <gerda.shank@gmail.com>'
+  - 'gfx <gfuji@cpan.org>'
   - 'Graham Knop <haarg@haarg.org>'
+  - 'gregor herrmann <gregoa@debian.org>'
   - 'Guillermo Roditi <groditi@gmail.com>'
+  - 'hakim <hakim.cassimally@gmail.com>'
   - 'Henry Van Styn <vanstyn@intellitree.com>'
   - 'Jason May <jason.a.may@gmail.com>'
   - 'Jay Allen <jay@endevver.com>'
   - 'Jay Hannah <jay@jays.net>'
   - 'Jay Kuri <jayk@jay-kuris-macbook.local>'
   - 'Jeff Bisbee <jbisbee@biz.(none)>'
-  - 'Jess Robinson <cpan@desert-island.me.uk>'
   - 'Jesse Vincent <jesse@bestpractical.com>'
+  - 'Jess Robinson <cpan@desert-island.me.uk>'
+  - 'joel <joel@fysh.org>'
   - 'John Douglas Porter <jdporter@cpan.org>'
   - 'John Goulah <jgoulah@cpan.org>'
   - 'John Napiorkowski <jjnapiork@cpan.org>'
   - 'Jonathan Rockway <jon@jrock.us>'
   - 'Justin DeVuyst <justin@devuyst.com>'
   - 'Justin Hunter <justin.d.hunter@gmail.com>'
+  - 'Karen Etheridge <github@froods.org>'
   - 'Kent Fredric <kentfredric@gmail.com>'
   - 'Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯 <daxim@cpan.org>'
   - 'Leon Brocard <acme@astray.com>'
-  - 'Marc Mims <marc@questright.com>'
   - 'Marcel Grünauer <hanekomu@gmail.com>'
+  - 'Marc Mims <marc@questright.com>'
   - 'Marcus Ramberg <marcus@nordaaker.com>'
-  - 'Mark A. Stratman <stratman@gmail.com>'
   - 'Mark Allen <mrallen1@yahoo.com>'
+  - 'Mark A. Stratman <stratman@gmail.com>'
   - 'Mateu X Hunter <hunter@missoula.org>'
-  - 'Matt Kraai <kraai@ftbfs.org>'
   - 'Matthew Horsfall <wolfsage@gmail.com>'
+  - 'matthof <rmhofmann@gmail.com>'
+  - 'Matt Kraai <kraai@ftbfs.org>'
+  - 'michaelr <michaelr@michaelr-laptop.(none)>'
+  - 'Michael Rykov <mrykov@gmail.com>'
+  - 'Michael Schout <mschout@gkg.net>'
   - 'Mike Whitaker <mike@altrion.org>'
   - 'Moritz Onken <onken@houseofdesign.de>'
   - 'Nathan Gray <kolibrie@graystudios.org>'
   - 'Nelo Onyiah <io1@sanger.ac.uk>'
+  - 'nperez <nperez@cpan.org>'
   - 'Olaf Alders <olaf@wundersolutions.com>'
   - 'Olivier Mengué <dolmen@cpan.org>'
   - 'Olof Johansson <olof@ethup.se>'
@@ -1623,36 +1801,29 @@ x_contributors:
   - 'Pedro Melo <melo@simplicidade.org>'
   - 'Perlover <perlover@perlover.com>'
   - 'Peter Shangov <pshangov@yahoo.com>'
+  - 'Philippe Bruhat (BooK) <book@cpan.org>'
   - 'Phillip Smith <ps@phillipadsmith.com>'
   - 'Piotr Roszatycki <piotr.roszatycki@gmail.com>'
+  - 'pktm <pktm@users.noreply.github.com>'
   - 'Rafael Kitover <rkitover@cpan.org>'
   - 'Ricardo Signes <rjbs@cpan.org>'
-  - "Robert 'phaylon' Sedlacek <rs@474.at>"
   - 'Robert Boone <robo4288@gmail.com>'
   - 'Robert Buels <rmb32@cornell.edu>'
+  - "Robert 'phaylon' Sedlacek <rs@474.at>"
   - 'Robin V <robinsp-gmail-com@nospam.com>'
+  - 'rodrigolive <rodrigolive@gmail.com>'
   - 'Sam Vilain <sam.vilain@catalyst.net.nz>'
   - 'Scott McWhirter <konobi@cpan.org>'
+  - 'shelling <navyblueshellingford@gmail.com>'
   - 'Shlomi Fish <shlomif@iglu.org.il>'
   - "Stefan O'Rear <stefanor@cox.net>"
+  - 'Thomas Sibley <tsibley@cpan.org>'
   - 'Todd Hepler <thepler@employees.org>'
   - 'Tokuhiro Matsuno <tokuhirom@gp.ath.cx>'
   - 'Tomas Doran <bobtfish@bobtfish.net>'
   - 'Tuomas Jormola <tj@solitudo.net>'
   - 'Upasana Shukla <me@upasana.me>'
   - 'Wallace Reis <reis.wallace@gmail.com>'
+  - 'wickline <m-s-w-github@wickline.org>'
   - 'Zachary Lome <zachary.lome@baml.com>'
   - 'Zoffix Znet <cpan@zoffix.com>'
-  - 'chromatic <chromatic@wgz.org>'
-  - 'franck cuny <franck@lumberjaph.net>'
-  - 'gfx <gfuji@cpan.org>'
-  - 'gregor herrmann <gregoa@debian.org>'
-  - 'hakim <hakim.cassimally@gmail.com>'
-  - 'joel <joel@fysh.org>'
-  - 'matthof <rmhofmann@gmail.com>'
-  - 'michaelr <michaelr@michaelr-laptop.(none)>'
-  - 'nperez <nperez@cpan.org>'
-  - 'rodrigolive <rodrigolive@gmail.com>'
-  - 'shelling <navyblueshellingford@gmail.com>'
-  - 'wickline <m-s-w-github@wickline.org>'
-  - 'Ævar Arnfjörð Bjarmason <avarab@gmail.com>'
@@ -1,6 +1,6 @@
 # This Makefile.PL for Moose was generated by
 # inc::MakeMaker <self>
-# and Dist::Zilla::Plugin::MakeMaker::Awesome 0.20.
+# and Dist::Zilla::Plugin::MakeMaker::Awesome 0.31.
 # Don't edit it but the dist.ini and plugins used to construct it.
 
 use strict;
@@ -51,21 +51,16 @@ sub can_run {
 
 die 'This distribution requires a working compiler' unless can_xs();
 
-use 5.008003;
-
-use ExtUtils::MakeMaker 6.30;
+use ExtUtils::MakeMaker;
 check_conflicts();
 
-
-
 my %WriteMakefileArgs = (
   "ABSTRACT" => "A postmodern object system for Perl 5",
   "AUTHOR" => "Stevan Little <stevan.little\@iinteractive.com>, Dave Rolsky <autarch\@urth.org>, Jesse Luehrs <doy\@tozt.net>, Shawn M Moore <code\@sartak.org>, \x{5d9}\x{5d5}\x{5d1}\x{5dc} \x{5e7}\x{5d5}\x{5d2}'\x{5de}\x{5df} (Yuval Kogman) <nothingmuch\@woobling.org>, Karen Etheridge <ether\@cpan.org>, Florian Ragwitz <rafl\@debian.org>, Hans Dieter Pearcey <hdp\@weftsoar.net>, Chris Prather <chris\@prather.org>, Matt S Trout <mst\@shadowcat.co.uk>",
-  "BUILD_REQUIRES" => {},
   "CONFIGURE_REQUIRES" => {
     "Dist::CheckConflicts" => "0.02",
     "ExtUtils::CBuilder" => "0.27",
-    "ExtUtils::MakeMaker" => "6.30",
+    "ExtUtils::MakeMaker" => 0,
     "File::Spec" => 0
   },
   "DISTNAME" => "Moose",
@@ -74,19 +69,22 @@ my %WriteMakefileArgs = (
   ],
   "LICENSE" => "perl",
   "NAME" => "Moose",
-  "OBJECT" => "xs/Attribute\$(OBJ_EXT) xs/AttributeCore\$(OBJ_EXT) xs/Class\$(OBJ_EXT) xs/Generated\$(OBJ_EXT) xs/HasAttributes\$(OBJ_EXT) xs/HasMethods\$(OBJ_EXT) xs/Inlined\$(OBJ_EXT) xs/Instance\$(OBJ_EXT) xs/Method\$(OBJ_EXT) xs/Moose\$(OBJ_EXT) xs/MOP\$(OBJ_EXT) xs/Overload\$(OBJ_EXT) xs/Package\$(OBJ_EXT) mop\$(OBJ_EXT)",
+  "OBJECT" => "xs/Attribute\$(OBJ_EXT) xs/AttributeCore\$(OBJ_EXT) xs/Class\$(OBJ_EXT) xs/Generated\$(OBJ_EXT) xs/HasAttributes\$(OBJ_EXT) xs/HasMethods\$(OBJ_EXT) xs/Inlined\$(OBJ_EXT) xs/Instance\$(OBJ_EXT) xs/Method\$(OBJ_EXT) xs/Moose\$(OBJ_EXT) xs/MOP\$(OBJ_EXT) xs/Package\$(OBJ_EXT) xs/ToInstance\$(OBJ_EXT) mop\$(OBJ_EXT)",
   "PREREQ_PM" => {
     "Carp" => "1.22",
     "Class::Load" => "0.09",
     "Class::Load::XS" => "0.01",
     "Data::OptList" => "0.107",
     "Devel::GlobalDestruction" => 0,
-    "Devel::StackTrace" => "1.30",
+    "Devel::OverloadInfo" => "0.002",
+    "Devel::StackTrace" => "1.33",
     "Dist::CheckConflicts" => "0.02",
     "Eval::Closure" => "0.04",
     "List::MoreUtils" => "0.28",
+    "List::Util" => "1.33",
     "MRO::Compat" => "0.05",
     "Module::Runtime" => "0.014",
+    "Module::Runtime::Conflicts" => 0,
     "Package::DeprecationManager" => "0.11",
     "Package::Stash" => "0.32",
     "Package::Stash::XS" => "0.24",
@@ -96,14 +94,22 @@ my %WriteMakefileArgs = (
     "Sub::Name" => "0.05",
     "Task::Weaken" => 0,
     "Try::Tiny" => "0.02",
-    "parent" => "0.223"
+    "parent" => "0.223",
+    "strict" => "1.03",
+    "warnings" => "1.03"
   },
   "TEST_REQUIRES" => {
+    "CPAN::Meta::Check" => "0.007",
+    "CPAN::Meta::Requirements" => 0,
+    "ExtUtils::MakeMaker" => 0,
+    "File::Spec" => 0,
+    "Test::CleanNamespaces" => "0.13",
     "Test::Fatal" => "0.001",
     "Test::More" => "0.88",
-    "Test::Requires" => "0.05"
+    "Test::Requires" => "0.05",
+    "Test::Warnings" => "0.016"
   },
-  "VERSION" => "2.1204",
+  "VERSION" => "2.1402",
   "XS" => {
     "xs/Attribute.xs" => "xs/Attribute.c",
     "xs/AttributeCore.xs" => "xs/AttributeCore.c",
@@ -116,30 +122,37 @@ my %WriteMakefileArgs = (
     "xs/MOP.xs" => "xs/MOP.c",
     "xs/Method.xs" => "xs/Method.c",
     "xs/Moose.xs" => "xs/Moose.c",
-    "xs/Overload.xs" => "xs/Overload.c",
-    "xs/Package.xs" => "xs/Package.c"
+    "xs/Package.xs" => "xs/Package.c",
+    "xs/ToInstance.xs" => "xs/ToInstance.c"
   },
   "clean" => {
-    "FILES" => "xs/Attribute\$(OBJ_EXT) xs/AttributeCore\$(OBJ_EXT) xs/Class\$(OBJ_EXT) xs/Generated\$(OBJ_EXT) xs/HasAttributes\$(OBJ_EXT) xs/HasMethods\$(OBJ_EXT) xs/Inlined\$(OBJ_EXT) xs/Instance\$(OBJ_EXT) xs/Method\$(OBJ_EXT) xs/Moose\$(OBJ_EXT) xs/MOP\$(OBJ_EXT) xs/Overload\$(OBJ_EXT) xs/Package\$(OBJ_EXT) mop\$(OBJ_EXT)"
+    "FILES" => "xs/Attribute\$(OBJ_EXT) xs/AttributeCore\$(OBJ_EXT) xs/Class\$(OBJ_EXT) xs/Generated\$(OBJ_EXT) xs/HasAttributes\$(OBJ_EXT) xs/HasMethods\$(OBJ_EXT) xs/Inlined\$(OBJ_EXT) xs/Instance\$(OBJ_EXT) xs/Method\$(OBJ_EXT) xs/Moose\$(OBJ_EXT) xs/MOP\$(OBJ_EXT) xs/Package\$(OBJ_EXT) xs/ToInstance\$(OBJ_EXT) mop\$(OBJ_EXT)"
   },
   "test" => {
     "TESTS" => "t/*.t t/attributes/*.t t/basics/*.t t/bugs/*.t t/cmop/*.t t/compat/*.t t/examples/*.t t/exceptions/*.t t/immutable/*.t t/metaclasses/*.t t/moose_util/*.t t/native_traits/*.t t/recipes/*.t t/roles/*.t t/test_moose/*.t t/todo_tests/*.t t/type_constraints/*.t"
   }
 );
 
-
 my %FallbackPrereqs = (
+  "CPAN::Meta::Check" => "0.007",
+  "CPAN::Meta::Requirements" => 0,
   "Carp" => "1.22",
   "Class::Load" => "0.09",
   "Class::Load::XS" => "0.01",
   "Data::OptList" => "0.107",
   "Devel::GlobalDestruction" => 0,
-  "Devel::StackTrace" => "1.30",
+  "Devel::OverloadInfo" => "0.002",
+  "Devel::StackTrace" => "1.33",
   "Dist::CheckConflicts" => "0.02",
   "Eval::Closure" => "0.04",
+  "ExtUtils::CBuilder" => "0.27",
+  "ExtUtils::MakeMaker" => 0,
+  "File::Spec" => 0,
   "List::MoreUtils" => "0.28",
+  "List::Util" => "1.33",
   "MRO::Compat" => "0.05",
   "Module::Runtime" => "0.014",
+  "Module::Runtime::Conflicts" => 0,
   "Package::DeprecationManager" => "0.11",
   "Package::Stash" => "0.32",
   "Package::Stash::XS" => "0.24",
@@ -148,14 +161,17 @@ my %FallbackPrereqs = (
   "Sub::Exporter" => "0.980",
   "Sub::Name" => "0.05",
   "Task::Weaken" => 0,
+  "Test::CleanNamespaces" => "0.13",
   "Test::Fatal" => "0.001",
   "Test::More" => "0.88",
   "Test::Requires" => "0.05",
+  "Test::Warnings" => "0.016",
   "Try::Tiny" => "0.02",
-  "parent" => "0.223"
+  "parent" => "0.223",
+  "strict" => "1.03",
+  "warnings" => "1.03"
 );
 
-
 unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
   delete $WriteMakefileArgs{TEST_REQUIRES};
   delete $WriteMakefileArgs{BUILD_REQUIRES};
@@ -169,10 +185,6 @@ $WriteMakefileArgs{CCFLAGS} = ( $Config::Config{ccflags} || '' ) . ' -I.';
 
 WriteMakefile(%WriteMakefileArgs);
 
-
-
-
-
 {
 package MY;
 
@@ -1,4 +1,6 @@
-[![Build Status](https://travis-ci.org/moose/Moose.png?branch=master,stable/2.08)](https://travis-ci.org/moose/Moose)
+[![CPAN version](https://badge.fury.io/pl/Moose.svg)](http://badge.fury.io/pl/Moose)
+[![Build Status](https://travis-ci.org/moose/Moose.png?branch=master,stable/2.12)](https://travis-ci.org/moose/Moose)
+[![Coverage Status](https://coveralls.io/repos/moose/Moose/badge.png?branch=master)](https://coveralls.io/r/moose/Moose?branch=master)
 
 Moose
 =====
@@ -91,20 +91,6 @@ this should be submitted to Sub::Identify first.
 
 These are things we think are good ideas, but they need more fleshing out.
 
-### Add overloading support
-
-or at least, don't break existing overloading support
-
-This shouldn't treat the overloading stuff as actual methods, since that's just
-an implementation detail, but we should provide an API for `add_overload`,
-`get_overload`, `get_overload_list`, etc. In particular, this would allow
-namespace::autoclean to not break things.
-
-Also, MooseX::Role::WithOverloading should probably be cored.
-
-This should probably also wait for the metarole unification fix, to avoid the
-::WithOverloading stuff being too insane.
-
 ### Actual API for metaclass extensions
 
 Right now, the only way to bundle multiple metaclass traits is via
@@ -184,12 +170,6 @@ There's a bunch of stuff that's duplicated, and other stuff that's not
 implemented as well as it could be (Class::MOP::Method::Wrapped should be a
 role, for instance).
 
-### Fix the error system
-
-oh god it's terrible
-
-More specifically, we really want exception objects.
-
 ### Moose::Util::TypeConstraints vs Moose::Meta::Type{Coercion,Constraint}
 
 The Util module has _way_ too much functionality. It needs to be
@@ -303,11 +283,6 @@ Special method types can't have method metaroles applied. Applying a method
 metarole to a class doesn't apply that role to things like constructors,
 accessors, etc.
 
-### `t/roles/compose_overloading.t`
-
-Overload methods aren't composed during role composition (this is detailed
-above - Add overloading support).
-
 ### `t/roles/method_modifiers.t`
 
 Method modifiers in roles don't support the regex form of method selection.
@@ -1,128 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-
-use File::Slurp qw( write_file );
-use PPI;
-
-rewrite_doc($_) for grep { -w } @ARGV;
-
-sub rewrite_doc {
-    my $file = shift;
-
-    my $doc = PPI::Document->new($file);
-
-    return unless $doc =~ /Test::Exception/;
-
-    print $file, "\n";
-
-    my $pattern = sub {
-        my $elt = $_[1];
-
-        return 1
-            if $elt->isa('PPI::Statement')
-                && $elt->content()
-                =~ /^\s*(?:::)?(?:lives_|throws_|dies_)(?:ok|and)/;
-
-        return 0;
-    };
-
-    for my $elt ( @{ $doc->find($pattern) || [] } ) {
-        transform_statement($elt);
-    }
-
-    my $content = $doc->content();
-    $content =~ s/Test::Exception/Test::Fatal/g;
-
-    write_file( $file, $content );
-}
-
-sub transform_statement {
-    my $stmt = shift;
-
-    my @children = $stmt->schildren;
-
-    my $func = shift @children;
-
-    my $colons = $func =~ /^::/ ? '::' : q{};
-
-    my $code;
-    if ( $func =~ /lives_/ ) {
-        $code = function(
-            $colons . 'is',
-            $children[0],
-            'undef',
-            $children[1]
-        );
-    }
-    elsif ( $func =~ /dies_/ ) {
-        $code = function(
-            $colons . 'isnt',
-            $children[0],
-            'undef',
-            $children[1]
-        );
-    }
-    elsif ( $func =~ /throws_/ ) {
-
-        # $children[2] is always a comma if it exists
-        if ( $children[1]->isa('PPI::Token::QuoteLike::Regexp') ) {
-            $code = function(
-                $colons . 'like',
-                $children[0],
-                $children[1],
-                $children[3]
-            );
-        }
-        else {
-            $code = function(
-                $colons . 'is',
-                $children[0],
-                $children[1],
-                $children[3]
-            );
-        }
-    }
-
-    $stmt->insert_before($code);
-    $stmt->remove;
-}
-
-sub function {
-    my $func      = shift;
-    my $exception = shift;
-    my $expect    = shift;
-    my $desc      = shift;
-
-    my $exc_func = $func =~ /^::/ ? '::exception' : 'exception';
-
-    my @code;
-
-    push @code,
-        PPI::Token::Word->new($func),
-        PPI::Token::Structure->new('('),
-        PPI::Token::Whitespace->new(q{ }),
-        PPI::Token::Word->new($exc_func),
-        PPI::Token::Whitespace->new(q{ }),
-        $exception->clone,
-        PPI::Token::Operator->new(','),
-        PPI::Token::Whitespace->new(q{ }),
-        ( ref $expect ? $expect->clone : PPI::Token::Word->new($expect) );
-
-    if ( $desc && $desc->isa('PPI::Token::Quote') ) {
-        push @code, PPI::Token::Operator->new(','),
-            PPI::Token::Whitespace->new(q{ }),
-            $desc->clone;
-    }
-
-    push @code,
-        PPI::Token::Whitespace->new(q{ }),
-        PPI::Token::Structure->new(')'),
-        PPI::Token::Structure->new(';');
-
-    my $stmt = PPI::Statement->new;
-    $stmt->add_element($_) for @code;
-
-    return $stmt;
-}
@@ -32,7 +32,8 @@ sub generate_docs {
             $exception = "Moose::Exception::".$file;
 
             load_class( $exception );
-            my $metaclass = Class::MOP::class_of( $exception );
+            my $metaclass = Class::MOP::class_of( $exception )
+                or die "No metaclass for $exception";
 
             my @super_classes = sort { $a->name cmp $b->name } $metaclass->superclasses;
             my @roles = sort { $a->name cmp $b->name } $metaclass->calculate_all_roles;
@@ -276,4 +277,3 @@ sub get_exceptions_to_messages {
 
     return \%hash;
 }
-
@@ -3,12 +3,13 @@
 use strict;
 use warnings;
 
-use lib 'inc';
 use File::Find::Rule;
 use Getopt::Long;
-use MyInline;
 use Test::Inline;
 
+use lib 'inc';
+use MyInline;
+
 my $quiet;
 GetOptions( 'quiet' => \$quiet );
 
@@ -30,7 +31,7 @@ $inline->save;
 
     package My::Output;
 
-    use File::Slurp qw( write_file );
+    use Path::Tiny;
 
     sub write {
         my $class   = shift;
@@ -39,7 +40,7 @@ $inline->save;
 
         $name =~ s/^moose_cookbook_//;
 
-        write_file( "t/recipes/$name", $content );
+        path( "t/recipes/$name" )->spew( $content );
 
         return 1;
     }
@@ -83,5 +83,3 @@ cmpthese($ins_rounds, {
         $caf_idx++;
     },
 }, 'noc');
-
-
@@ -27,4 +27,3 @@
         y: 6
       accessor: x
       accessor_args: [ 5 ]
-
@@ -42,4 +42,3 @@ sub clear {
 __PACKAGE__;
 
 __END__
-
@@ -33,4 +33,3 @@ sub clear {
 __PACKAGE__;
 
 __END__
-
@@ -16,5 +16,3 @@ foreach my $bench ( @$data ) {
     Bench::Run->new( %$bench )->run;
     print "\n\n";
 }
-
-
@@ -3,7 +3,6 @@
 use strict;
 use warnings;
 
-use Scalar::Util 'blessed';
 use Benchmark qw[cmpthese];
 
 use Moose::Util::TypeConstraints;
@@ -76,4 +76,3 @@ for my $module (sort keys %lib_map) {
     system($cmd);
     print "\n";
 }
-
@@ -114,4 +114,3 @@ cmpthese($rounds, {
         CMM::Install::around(method => sub {});
     },
 }, 'noc');
-
@@ -8,7 +8,7 @@ use autodie;
 use Parse::BACKPAN::Packages;
 use LWP::Simple;
 use Archive::Tar;
-use File::Slurp 'slurp';
+use Path::Tiny;
 
 my $backpan = Parse::BACKPAN::Packages->new;
 my @cmops   = $backpan->distributions('Class-MOP');
@@ -28,7 +28,7 @@ for my $moose (@mooses) {
     my $moose_dir = build($moose);
 
     # Find the CMOP dependency
-    my $makefile = slurp("$moose_dir/Makefile.PL");
+    my $makefile = path("$moose_dir/Makefile.PL")->slurp_utf8;
     my ($cmop_dep) = $makefile =~ /Class::MOP.*?([0-9._]+)/
         or die "Unable to find Class::MOP version dependency in $moose_dir/Makefile.PL";
 
@@ -150,4 +150,3 @@ sub build {
     (my $directory = $arbitrary_file) =~ s{/.*}{};
     return $directory;
 }
-
@@ -151,4 +151,3 @@ timethese(
         },
     }
 );
-
@@ -4,6 +4,8 @@ use strict;
 use warnings;
 # PODNAME: moose-outdated
 
+# this script was generated with Dist::Zilla::Plugin::Conflicts 0.16
+
 use Getopt::Long;
 use Moose::Conflicts;
 
@@ -13,21 +13,28 @@ license = Perl_5
 copyright_holder = Infinity Interactive, Inc.
 copyright_year = 2006
 
-version = 2.1204
+version = 2.1402
 
 ; This sets the required version of Dist::Zilla
 :version = 4.200016
 
-; authordep CPAN::Meta::Requirements
-[=inc::RequireAuthorDeps]
+[EnsurePrereqsInstalled]
+:version = 0.003
+build_phase = release ; be nice to travis
+type = requires
+type = recommends
+
 [=inc::Clean]
 
 [GatherDir]
-exclude_match = ^t/recipes/(?!basics_geonome_overloadingsubtypesandcoercion)
+:version = 5.021
+exclude_match = ^t/recipes/(?!basics_genome_overloadingsubtypesandcoercion)
 exclude_match = ^Moose-[\d.]+
+exclude_match = ^nytprof.*
+exclude_filename = Makefile.PL
+prune_directory = ^Moose-[\d.]+
 
 [PruneCruft]
-[ManifestSkip]  ; we have no MANIFEST.SKIP file, so this is a no-op
 [MetaYAML]
 [MetaJSON]
 [License]
@@ -36,23 +43,21 @@ exclude_match = ^Moose-[\d.]+
 
 ; authordep Dist::Zilla::Plugin::MakeMaker::Awesome
 [=inc::MakeMaker]
-[Manifest]
+default_jobs = 9
 
-[TestRelease]
-[UploadToCPAN]
+[Manifest]
 
 [NextRelease]
 format = %-7v  %{yyyy-MM-dd}d%{ (TRIAL RELEASE)}T
 
-[PruneFiles]
-filenames = Makefile.PL
-match = ^nytprof.*
-
 [PkgVersion]
+:version = 5.010
+die_on_existing_version = 1
+die_on_line_insertion = 1
+
 [MetaConfig]
 
-[Authority]
-authority = cpan:STEVAN
+[=inc::SimpleAuthority]
 
 [MetaResources]
 bugtracker.web    = https://rt.cpan.org/Dist/Display.html?Name=Moose
@@ -64,10 +69,21 @@ repository.type   = git
 x_IRC = irc://irc.perl.org/#moose
 x_MailingList = http://lists.perl.org/list/moose.html
 
+[FileFinder::ByName / PodModules]
+dir = lib
+file = *.pod
+
+[FileFinder::Filter / ModulesSansPod]
+finder = :InstallModules
+skip = \.pod$
+
+[=inc::SimpleProvides]
+finder = PodModules
+
 [MetaProvides::Package]
 meta_noindex = 1
 :version = 1.15000002
-finder = :InstallModules
+finder = ModulesSansPod ; to avoid "No namespaces detected in file..." spewage
 
 [MetaNoIndex]
 package   = Class::MOP::Class::Immutable::Trait
@@ -95,6 +111,7 @@ post_code_replacer = replace_with_nothing
 
 ; authordep Test::Inline
 ; authordep File::Find::Rule
+; authordep Test::Inline::Extract
 [=inc::ExtractInlineTests]
 
 [PromptIfStale]
@@ -102,20 +119,47 @@ phase = release
 check_all_prereqs = 1
 check_all_plugins = 1
 
-[EOLTests]
+[Test::EOL]
+:version = 0.14
 [PodSyntaxTests]
 [Test::NoTabs]
 [MetaTests]
 [Test::Kwalitee]
+skiptest = use_strict ; temporary, until RT#94468 is fixed
+
 [MojibakeTests]
 [RunExtraTests]
+default_jobs = 9
 
 [Test::ReportPrereqs]
+include = Dist::CheckConflicts
+include = MooseX::NonMoose
+include = Algorithm::C3
+include = DateTime
+include = DateTime::Calendar::Mayan
+include = DateTime::Format::MySQL
+include = Declare::Constraints::Simple
+include = DBM::Deep
+include = HTTP::Headers
+include = IO::File
+include = IO::String
+include = Locale::US
+include = Module::Refresh
+include = Params::Coerce
+include = Regexp::Common
+include = SUPER
+include = Test::Deep
+include = Test::DependentModules
+include = Test::LeakTrace
+include = Test::Output
+include = URI
+
 [Test::CPAN::Changes]
 
 [Test::Compile]
 :version = 2.037
-xt_mode = 1
+phase = develop
+filename = xt/release/00-compile.t
 bail_out_on_fail = 1
 ; this serves as a TODO list for getting all modules to load independently --
 ; see RT#89536
@@ -140,9 +184,8 @@ skip = ^Moose::Meta::TypeConstraint::Parameterized$
 skip = ^Moose::Meta::TypeConstraint::Role$
 skip = ^Moose::Meta::TypeConstraint::Union$
 
-; for us to use this, we need the [PkgVersion] fix that also munges .pod
-;[Test::NewVersion]
-;:version = 0.008
+[=inc::CheckReleaseType]
+[CheckVersionIncrement]
 
 ; we would like to have this, but currently there are false negatives:
 ; https://rt.cpan.org/Ticket/Display.html?id=87883
@@ -154,40 +197,78 @@ skip = ^Moose::Meta::TypeConstraint::Union$
 [CheckChangesHasContent]
 ;[CheckPrereqsIndexed]
 
+; all runtime deps must be author deps
 [Prereqs]
-parent                      = 0.223
-Carp                        = 1.22
-Class::Load                 = 0.09
-Class::Load::XS             = 0.01
-Data::OptList               = 0.107
-Devel::GlobalDestruction    = 0
-Eval::Closure               = 0.04
-List::MoreUtils             = 0.28
-Module::Runtime             = 0.014
-MRO::Compat                 = 0.05
-Package::DeprecationManager = 0.11
-Package::Stash              = 0.32
-Package::Stash::XS          = 0.24
-Params::Util                = 1.00
-Scalar::Util                = 1.19
-Sub::Exporter               = 0.980
-Sub::Name                   = 0.05
-Task::Weaken                = 0
-Try::Tiny                   = 0.02
-perl                        = 5.8.3
-Devel::StackTrace           = 1.30
+           parent                      = 0.223
+;authordep parent                      = 0.223
+           Carp                        = 1.22
+;authordep Carp                        = 1.22
+           Class::Load                 = 0.09
+;authordep Class::Load                 = 0.09
+           Class::Load::XS             = 0.01
+;authordep Class::Load::XS             = 0.01
+           Data::OptList               = 0.107
+;authordep Data::OptList               = 0.107
+           Devel::GlobalDestruction    = 0
+;authordep Devel::GlobalDestruction    = 0
+           Eval::Closure               = 0.04
+;authordep Eval::Closure               = 0.04
+           List::MoreUtils             = 0.28
+;authordep List::MoreUtils             = 0.28
+           Module::Runtime             = 0.014
+;authordep Module::Runtime             = 0.014
+           Module::Runtime::Conflicts  = 0
+;authordep Module::Runtime::Conflicts  = 0
+           MRO::Compat                 = 0.05
+;authordep MRO::Compat                 = 0.05
+           Package::DeprecationManager = 0.11
+;authordep Package::DeprecationManager = 0.11
+           Package::Stash              = 0.32
+;authordep Package::Stash              = 0.32
+           Package::Stash::XS          = 0.24
+;authordep Package::Stash::XS          = 0.24
+           Params::Util                = 1.00
+;authordep Params::Util                = 1.00
+           Scalar::Util                = 1.19
+;authordep Scalar::Util                = 1.19
+           Sub::Exporter               = 0.980
+;authordep Sub::Exporter               = 0.980
+           Sub::Name                   = 0.05
+;authordep Sub::Name                   = 0.05
+           Task::Weaken                = 0
+;authordep Task::Weaken                = 0
+           Try::Tiny                   = 0.02
+;authordep Try::Tiny                   = 0.02
+           perl                        = 5.8.3
+;authordep perl                        = 5.8.3
+           Devel::StackTrace           = 1.33
+;authordep Devel::StackTrace           = 1.33
+           strict                      = 1.03
+;authordep strict                      = 1.03
+           warnings                    = 1.03
+;authordep warnings                    = 1.03
+           Devel::OverloadInfo         = 0.002
+;authordep Devel::OverloadInfo         = 0.002
+           List::Util                  = 1.33
+;authordep List::Util                  = 1.33
 
 [Prereqs / TestRequires]
-Test::Fatal    = 0.001
-Test::More     = 0.88
-Test::Requires = 0.05
+Test::CleanNamespaces = 0.13
+Test::Fatal           = 0.001
+Test::More            = 0.88
+Test::Requires        = 0.05
+Test::Warnings        = 0.016
 
+; all configure deps must be author deps
 [Prereqs / ConfigureRequires]
-ExtUtils::CBuilder = 0.27
-File::Spec = 0
+           ExtUtils::CBuilder = 0.27
+;authordep ExtUtils::CBuilder = 0.27
+           File::Spec = 0
+;authordep File::Spec = 0
 ;Config = 0     ; not actually in 02packages.details.txt!!!
 
 [Prereqs::AuthorDeps]
+relation = suggests
 exclude = inc::CheckDelta
 exclude = inc::Clean
 exclude = inc::ExtractInlineTests
@@ -196,9 +277,10 @@ exclude = inc::GitUpToDate
 exclude = inc::MMHelper
 exclude = inc::MakeMaker
 exclude = inc::MyInline
-exclude = inc::RequireAuthorDeps
+exclude = inc::SimpleProvides
 exclude = inc::TestRelease
 
+; mostly, these are things needed by xt tests
 [Prereqs / DevelopRequires]
 Algorithm::C3                = 0
 Data::Visitor                = 0
@@ -206,30 +288,30 @@ DateTime                     = 0
 DateTime::Calendar::Mayan    = 0
 DateTime::Format::MySQL      = 0
 Declare::Constraints::Simple = 0
-DBM::Deep                    = 0
+DBM::Deep                    = 1.003
 File::Find::Rule             = 0
 HTTP::Headers                = 0
 IO::File                     = 0
 IO::String                   = 0
 Locale::US                   = 0
-Module::Info                 = 0
 Module::Refresh              = 0
+MooseX::MarkAsMethods        = 0
 PadWalker                    = 0
 Params::Coerce               = 0
 Regexp::Common               = 0
-SUPER                        = 0
+SUPER                        = 1.10
 Test::Deep                   = 0
-Test::DependentModules       = 0.13
+;Test::DependentModules       = 0.13    ; bad dep chain, used by a disabled test.
 Test::Inline                 = 0
 Test::LeakTrace              = 0
 Test::Memory::Cycle          = 0
 Test::Output                 = 0
+Test::Pod::Coverage          = 1.04
 Test::Spelling               = 0
 URI                          = 0
-Test::Inline::Extract        = 0
 ExtUtils::MakeMaker::Dist::Zilla::Develop = 0
 MooseX::NonMoose             = 0
-Specio                       = 0.07
+Specio                       = 0.10
 Module::CPANTS::Analyse      = 0.92
 Test::Kwalitee               = 1.15
 blib                         = 0
@@ -240,10 +322,8 @@ Class::Load                  = 0.07
 ; remove this if this is an issue
 Devel::PartialDump = 0.14
 
-[Prereqs / DevelopConflicts]
-Dist::Zilla::Plugin::Conflicts = == 0.11
-
 [Conflicts]
+:version = 0.16
 -script = bin/moose-outdated
 Catalyst                       = 5.90049999
 Config::MVP                    = 2.200004
@@ -272,7 +352,6 @@ MooseX::Constructor::AllErrors = 0.021
 MooseX::Declare                = 0.35
 MooseX::FollowPBP              = 0.02
 MooseX::Getopt                 = 0.56
-MooseX::HasDefaults            = 0.02
 MooseX::InstanceTracking       = 0.04
 MooseX::LazyRequire            = 0.06
 MooseX::Meta::Attribute::Index = 0.04
@@ -286,7 +365,7 @@ MooseX::PrivateSetters         = 0.03
 MooseX::POE                    = 0.214
 MooseX::Role::Cmd              = 0.06
 MooseX::Role::Parameterized    = 1.00
-MooseX::Role::WithOverloading  = 0.07
+MooseX::Role::WithOverloading  = 0.14
 MooseX::Runnable               = 0.03
 MooseX::Scaffold               = 0.05
 MooseX::SemiAffordanceAccessor = 0.05
@@ -310,20 +389,30 @@ Test::Able                     = 0.10
 Test::CleanNamespaces          = 0.03
 Test::Moose::More              = 0.022
 Test::TempDir                  = 0.05
+Throwable                      = 0.102080
+
+[Test::CheckBreaks]
+conflicts_module = Moose::Conflicts
+
+; authordep Dist::Zilla::Util::AuthorDeps = 5.021
+; authordep CPAN::Meta::Requirements
+; authordep Test::Deep
+[=inc::CheckAuthorDeps]
 
 [=inc::CheckDelta]
 [=inc::GitUpToDate]
 
 [Git::Remote::Check]
-branch = stable/2.12
-remote_branch = stable/2.12
+branch = stable/2.14
+remote_branch = stable/2.14
 
 [Git::CheckFor::CorrectBranch]
-release_branch = stable/2.12
+release_branch = stable/2.14
 
 [Git::Check]
 allow_dirty =
 
+[TestRelease]
 [ConfirmRelease]
 
 [Git::Commit]
@@ -336,7 +425,16 @@ tag_message = %v%t
 
 [Git::Push]
 
-[ContributorsFromGit]
+[UploadToCPAN]
+
+; note: this is going to die if releasing from an older release (the merge
+; won't go in cleanly)
+[Run::AfterRelease]
+run = git checkout master
+run = git merge --ff-only stable/2.14
+run = git push
+
+[Git::Contributors]
 
 ; authordep Class::Load
 ; authordep IPC::System::Simple
@@ -0,0 +1,52 @@
+use strict;
+use warnings;
+package inc::CheckAuthorDeps;
+
+# our goal is to verify that the declared authordeps already reflect
+# everything in configure + runtime prerequisites -- otherwise, we won't be
+# able to bootstrap our built Moose for the purposes of running
+# author/docGenerator.pl
+
+use Moose;
+with 'Dist::Zilla::Role::AfterBuild';
+
+sub after_build
+{
+    my $self = shift;
+
+    # get our authordeps
+    require Dist::Zilla::Util::AuthorDeps;
+    Dist::Zilla::Util::AuthorDeps->VERSION(5.021);
+
+    require CPAN::Meta::Requirements;
+    my $authordeps = CPAN::Meta::Requirements->new;
+    $authordeps->add_string_requirement(%$_)
+        foreach @{ Dist::Zilla::Util::AuthorDeps::extract_author_deps('.') };
+
+    # get our prereqs
+    my $prereqs = $self->zilla->prereqs;
+
+    # merge prereqs into authordeps
+    my $merged_prereqs = CPAN::Meta::Requirements->new;
+    $merged_prereqs->add_requirements($authordeps);
+    $merged_prereqs->add_requirements($prereqs->requirements_for('configure', 'requires'));
+    $merged_prereqs->add_requirements($prereqs->requirements_for('runtime', 'requires'));
+
+    # remove some false positives we know we already have fulfilled
+    $merged_prereqs->clear_requirement('ExtUtils::MakeMaker');
+    $merged_prereqs->clear_requirement('Dist::CheckConflicts');
+
+    # the merged set should not be different than the original authordeps.
+    require Test::Deep;
+    my ($ok, $stack) = Test::Deep::cmp_details(
+        $authordeps->as_string_hash,
+        Test::Deep::superhashof($merged_prereqs->as_string_hash),
+    );
+
+    return if $ok;
+
+    $self->log_fatal('authordeps does not have all prereqs found in configure, runtime prereqs: '
+        . Test::Deep::deep_diag($stack));
+}
+
+1;
@@ -0,0 +1,37 @@
+package inc::CheckReleaseType;
+use Moose;
+with 'Dist::Zilla::Role::BeforeRelease';
+
+# this is so I don't accidentally release 2.x<odd>xx without the --trial
+# option, which has very nearly happened a few times.
+
+sub before_release
+{
+    my $self = shift;
+    my $version = $self->zilla->version;
+
+    $version =~ m/^\d\.\d{4}$/
+        or $self->log_fatal("version $version doesn't seem to conform to the normal specification!");
+
+    my $digit = substr($version, 3, 1);
+    if ($self->zilla->is_trial)
+    {
+        $digit % 2 == 1
+            or $self->log_fatal('-TRIAL releases must be numbered 2.x{ODD}xx!');
+    }
+    else
+    {
+        $digit % 2 == 0
+            or $self->log_fatal('stable releases must be numbered 2.x{EVEN}xx!');
+
+        # Moose::Manual::Support says:
+        # 2.x{EVEN}00 must be January, April, July, October only.
+        if (substr($version, -2, 2) eq '00')
+        {
+            # month is 0..11
+            my $month = (gmtime(time))[4];
+            $month % 3 == 0
+                or $self->log_fatal('2.x{EVEN}00 releases can only occur in January, April, July or October!');
+        }
+    }
+}
@@ -16,14 +16,4 @@ sub before_build {
             die "couldn't exec: $!";
         }
     }
-
-    if (-e 'META.yml') {
-        $self->log("Removing existing META.yml file");
-        unlink('META.yml');
-    }
-
-    if ( -e 'lib/Moose/Manual/Exceptions/Manifest.pod') {
-        $self->log('Removing existing Moose::Manual::Exceptions::Manifest');
-        unlink('lib/Moose/Manual/Exceptions/Manifest.pod');
-    }
 }
@@ -4,10 +4,7 @@ use Moose;
 
 with 'Dist::Zilla::Role::FileGatherer';
 
-use File::Basename qw( basename );
 use File::Find::Rule;
-use File::Spec;
-use File::Temp qw( tempdir );
 use inc::MyInline;
 use Test::Inline;
 
@@ -18,13 +18,14 @@ sub gather_files {
         name    => $filename->stringify,
         # more to fill in later
         content => <<'END_POD',
-package Moose::Manual::Exceptions::Manifest;
 use strict;
 use warnings;
-
+package Moose::Manual::Exceptions::Manifest;
 # ABSTRACT: Moose's Exception Types
+
 __END__
 
+=for comment insert generated content here
 END_POD
     ));
 }
@@ -47,11 +48,11 @@ sub after_build {
     my $text = capturex($^X, "author/docGenerator.pl");
 
     my $file_obj = first { $_->name eq $filename } @{$self->zilla->files};
-    $file_obj->content($file_obj->content . $text);
 
-    $self->zilla->plugin_named('SurgicalPodWeaver')->munge_file($file_obj);
+    my $content = $file_obj->content;
+    my $pos = index($content, "\n\n=for comment insert generated content here");
+    $file_obj->content(substr($content, 0, $pos) . "\n\n" . $text . substr($content, $pos, -1));
 
-    $filename->touchpath;
     $filename->spew_raw($file_obj->encoded_content);
 }
 
@@ -33,6 +33,20 @@ sub before_build {
 
     die "Branch $branch is not up to date (origin: $origin, HEAD: $head)"
         if $origin ne $head;
+
+
+    # now also check that HEAD is current with the release branch
+    # that is, that the release branch is an ancestor commit of HEAD.
+    my $release_branch = ($self->zilla->plugin_named('Git::CheckFor::CorrectBranch')->release_branch)[0];
+    foreach my $remote ('origin/', '')
+    {
+        my $release_commit = git "rev-parse ${remote}$release_branch";
+        my $common_ancestor = git "merge-base $head $release_commit";
+
+        die "Branch $branch does not contain all commits from the current release branch ",
+                "(common ancestor for ${remote}$release_branch: $common_ancestor)"
+            if $common_ancestor ne $release_commit;
+    }
 }
 
 1;
@@ -4,8 +4,6 @@ use strict;
 use warnings;
 
 use Config;
-use Cwd qw( abs_path );
-use File::Basename qw( dirname );
 
 sub ccflags_dyn {
     my $is_dev = shift;
@@ -19,7 +19,11 @@ use warnings;
             package\s+                            # A package
             [^\W\d]\w*(?:(?:\'|::)[^\W\d]\w*)*    # ... with a name
             \s*;                                  # And a statement terminator
-                |
+        |                                  # OR
+            \#\s*PODNAME:\s+                      # A PODNAME comment
+            [^\W\d]\w*(?:(?:\'|::)[^\W\d]\w*)*    # ... with a name
+            (?:\s+|$)                             # And a name terminator
+        |
                         =head1[ \t]+SYNOPSIS\n
                         .*?
                         (?=\n=)
@@ -60,6 +64,13 @@ use warnings;
         # tests.
         return unless @elements > 2;
 
+        if ( @elements && $self->{source} =~ /# PODNAME: (Moose::Cookbook\S+)(?:\s|$)/ ) {
+            foreach my $element (@elements)
+            {
+                $element = "package $1;" if $element =~ /# PODNAME: (Moose::Cookbook\S+)(?:\s+|$)/;
+            }
+        }
+
         if ( @elements && $self->{source} =~ /=head1 NAME\n\n(Moose::Cookbook\S+)/ ) {
             unshift @elements, 'package ' . $1 . ';';
         }
@@ -1,27 +0,0 @@
-package inc::RequireAuthorDeps;
-
-use Class::Load qw(load_class);
-use Moose;
-
-use CPAN::Meta::Requirements;
-use Try::Tiny;
-
-with 'Dist::Zilla::Role::BeforeRelease';
-
-sub before_release {
-    my $self = shift;
-
-    $self->log("Ensuring all author dependencies are installed");
-    my $req = CPAN::Meta::Requirements->new;
-    my $prereqs = $self->zilla->prereqs;
-
-    for my $phase (qw(build test configure runtime develop)) {
-        $req->add_requirements($prereqs->requirements_for($phase, 'requires'));
-    }
-
-    for my $mod (grep { $_ ne 'perl' } $req->required_modules) {
-        load_class($mod);
-    }
-}
-
-1;
@@ -0,0 +1,13 @@
+use strict;
+use warnings;
+package inc::SimpleAuthority;
+
+use Moose;
+with 'Dist::Zilla::Role::MetaProvider';
+
+sub metadata
+{
+    return +{ x_authority => 'cpan:STEVAN' };
+}
+
+1;
@@ -0,0 +1,34 @@
+use strict;
+use warnings;
+package inc::SimpleProvides;
+
+use Moose;
+with 'Dist::Zilla::Role::MetaProvider',
+    'Dist::Zilla::Role::FileFinderUser' => {
+        default_finders => [ ':InstallModules' ],
+    },
+;
+
+sub metadata
+{
+    my $self = shift;
+
+    my $version = $self->zilla->version;
+
+    return +{
+        provides => {
+            map {
+                # this is an awful hack and assumes ascii package names:
+                # please do not cargo-cult this code elsewhere. The proper
+                # thing to do is to crack open the file and read the pod name.
+                my $filename = $_->name;
+                (my $package = $filename) =~ s{[/\\]}{::}g;
+                $package =~ s/^lib:://;
+                $package =~ s/\.pod$//;
+                $package => { file => $filename, version => $version }
+            } @{$self->found_files},
+        }
+    };
+}
+
+__PACKAGE__->meta->make_immutable;
@@ -1,9 +1,5 @@
-
 package Class::MOP::Attribute;
-BEGIN {
-  $Class::MOP::Attribute::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Attribute::VERSION = '2.1204';
+$Class::MOP::Attribute::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -15,8 +11,6 @@ use Try::Tiny;
 
 use parent 'Class::MOP::Object', 'Class::MOP::Mixin::AttributeCore';
 
-use Moose::Util 'throw_exception';
-
 # NOTE: (meta-circularity)
 # This method will be replaced in the
 # boostrap section of Class::MOP, by
@@ -35,24 +29,24 @@ sub new {
     my $name = $options{name};
 
     (defined $name)
-        || throw_exception( MOPAttributeNewNeedsAttributeName => class  => $class,
+        || $class->_throw_exception( MOPAttributeNewNeedsAttributeName => class  => $class,
                                                                  params => \%options
                           );
 
     $options{init_arg} = $name
         if not exists $options{init_arg};
     if(exists $options{builder}){
-        throw_exception( BuilderMustBeAMethodName => class  => $class,
+        $class->_throw_exception( BuilderMustBeAMethodName => class  => $class,
                                                      params => \%options
                        )
             if ref $options{builder} || !(defined $options{builder});
-        throw_exception( BothBuilderAndDefaultAreNotAllowed => class  => $class,
+        $class->_throw_exception( BothBuilderAndDefaultAreNotAllowed => class  => $class,
                                                                params => \%options
                        )
             if exists $options{default};
     } else {
         ($class->is_default_a_coderef(\%options))
-            || throw_exception( ReferencesAreNotAllowedAsDefault => class          => $class,
+            || $class->_throw_exception( ReferencesAreNotAllowedAsDefault => class          => $class,
                                                                     params         => \%options,
                                                                     attribute_name => $options{name}
                               )
@@ -60,7 +54,7 @@ sub new {
     }
 
     if( $options{required} and not( defined($options{builder}) || defined($options{init_arg}) || exists $options{default} ) ) {
-        throw_exception( RequiredAttributeLacksInitialization => class  => $class,
+        $class->_throw_exception( RequiredAttributeLacksInitialization => class  => $class,
                                                                  params => \%options
                        );
     }
@@ -152,7 +146,7 @@ sub initialize_instance_slot {
             );
         }
         else {
-            throw_exception( BuilderMethodNotSupportedForAttribute => attribute => $self,
+            $self->_throw_exception( BuilderMethodNotSupportedForAttribute => attribute => $self,
                                                                       instance  => $instance
                            );
         }
@@ -255,7 +249,7 @@ sub slots { (shift)->name }
 sub attach_to_class {
     my ($self, $class) = @_;
     (blessed($class) && $class->isa('Class::MOP::Class'))
-        || throw_exception( AttachToClassNeedsAClassMOPClassInstanceOrASubclass => attribute => $self,
+        || $self->_throw_exception( AttachToClassNeedsAClassMOPClassInstanceOrASubclass => attribute => $self,
                                                                                    class     => $class
                           );
     weaken($self->{'associated_class'} = $class);
@@ -383,7 +377,7 @@ sub _process_accessors {
 
     if (ref($accessor)) {
         (ref($accessor) eq 'HASH')
-            || throw_exception( BadOptionFormat => attribute    => $self,
+            || $self->_throw_exception( BadOptionFormat => attribute    => $self,
                                                    option_value => $accessor,
                                                    option_name  => $type
                               );
@@ -420,7 +414,7 @@ sub _process_accessors {
             );
         }
         catch {
-            throw_exception( CouldNotCreateMethod => attribute    => $self,
+            $self->_throw_exception( CouldNotCreateMethod => attribute    => $self,
                                                      option_value => $accessor,
                                                      option_name  => $type,
                                                      error        => $_
@@ -515,7 +509,7 @@ Class::MOP::Attribute - Attribute Meta Object
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,16 +1,10 @@
 package Class::MOP::Class::Immutable::Trait;
-BEGIN {
-  $Class::MOP::Class::Immutable::Trait::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Class::Immutable::Trait::VERSION = '2.1204';
+$Class::MOP::Class::Immutable::Trait::VERSION = '2.1402';
 use strict;
 use warnings;
 
 use MRO::Compat;
-
-use Scalar::Util 'blessed', 'weaken';
-
-use Moose::Util 'throw_exception';
+use Module::Runtime 'use_module';
 
 # the original class of the metaclass instance
 sub _get_mutable_metaclass_name { $_[0]{__immutable}{original_class} }
@@ -22,12 +16,12 @@ sub _immutable_metaclass { ref $_[1] }
 
 sub _immutable_read_only {
     my $name = shift;
-    throw_exception( CallingReadOnlyMethodOnAnImmutableInstance => method_name => $name );
+    __throw_exception( CallingReadOnlyMethodOnAnImmutableInstance => method_name => $name );
 }
 
 sub _immutable_cannot_call {
     my $name = shift;
-    throw_exception( CallingMethodOnAnImmutableInstance => method_name => $name );
+    __throw_exception( CallingMethodOnAnImmutableInstance => method_name => $name );
 }
 
 for my $name (qw/superclasses/) {
@@ -88,6 +82,14 @@ sub _method_map {
     $self->{__immutable}{_method_map} ||= $self->$orig;
 }
 
+# private method, for this file only -
+# if we declare a method here, it will behave differently depending on what
+# class this trait is applied to, so we won't have a reliable parameter list.
+sub __throw_exception {
+    my ($exception_type, @args_to_exception) = @_;
+    die use_module( "Moose::Exception::$exception_type" )->new( @args_to_exception );
+}
+
 1;
 
 # ABSTRACT: Implements immutability for metaclass objects
@@ -104,7 +106,7 @@ Class::MOP::Class::Immutable::Trait - Implements immutability for metaclass obje
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,9 +1,5 @@
-
 package Class::MOP::Class;
-BEGIN {
-  $Class::MOP::Class::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Class::VERSION = '2.1204';
+$Class::MOP::Class::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -15,16 +11,15 @@ use Class::MOP::MiniTrait;
 
 use Carp         'confess';
 use Module::Runtime 'use_package_optimistically';
-use Scalar::Util 'blessed', 'reftype', 'weaken';
+use Scalar::Util 'blessed';
 use Sub::Name    'subname';
 use Try::Tiny;
-use List::MoreUtils 'all';
+use List::Util 1.33 'all';
 
 use parent 'Class::MOP::Module',
          'Class::MOP::Mixin::HasAttributes',
-         'Class::MOP::Mixin::HasMethods';
-
-use Moose::Util 'throw_exception';
+         'Class::MOP::Mixin::HasMethods',
+         'Class::MOP::Mixin::HasOverloads';
 
 # Creation
 
@@ -41,7 +36,7 @@ sub initialize {
     }
 
     ($package_name && !ref($package_name))
-        || throw_exception( InitializeTakesUnBlessedPackageName => package_name => $package_name );
+        || ($class||__PACKAGE__)->_throw_exception( InitializeTakesUnBlessedPackageName => package_name => $package_name );
     return Class::MOP::get_metaclass_by_name($package_name)
         || $class->_construct_class_instance(package => $package_name, @_);
 }
@@ -76,7 +71,7 @@ sub _construct_class_instance {
     my $options      = @_ == 1 ? $_[0] : {@_};
     my $package_name = $options->{package};
     (defined $package_name && $package_name)
-        || throw_exception("ConstructClassInstanceTakesPackageName");
+        || $class->_throw_exception("ConstructClassInstanceTakesPackageName");
     # NOTE:
     # return the metaclass if we have it cached,
     # and it is still defined (it has not been
@@ -236,7 +231,8 @@ sub _check_class_metaclass_compatibility {
 
         my $super_meta_type = $super_meta->_real_ref_name;
 
-        throw_exception( IncompatibleMetaclassOfSuperclass => class                => $self,
+        $self->_throw_exception( IncompatibleMetaclassOfSuperclass => class_name           => $self->name,
+                                                              class_meta_type      => ref( $self ),
                                                               superclass_name      => $superclass_name,
                                                               superclass_meta_type => $super_meta_type
                        );
@@ -262,7 +258,7 @@ sub _check_single_metaclass_compatibility {
     if (!$self->_single_metaclass_is_compatible($metaclass_type, $superclass_name)) {
         my $super_meta = Class::MOP::get_metaclass_by_name($superclass_name);
 
-        throw_exception( MetaclassTypeIncompatible => class           => $self,
+        $self->_throw_exception( MetaclassTypeIncompatible => class_name      => $self->name,
                                                       superclass_name => $superclass_name,
                                                       metaclass_type  => $metaclass_type
                        );
@@ -365,7 +361,7 @@ sub _fix_class_metaclass_incompatibility {
 
     if ($self->_class_metaclass_can_be_made_compatible($super_meta)) {
         ($self->is_pristine)
-            || throw_exception( CannotFixMetaclassCompatibility => class      => $self,
+            || $self->_throw_exception( CannotFixMetaclassCompatibility => class_name => $self->name,
                                                                    superclass => $super_meta
                               );
 
@@ -381,7 +377,7 @@ sub _fix_single_metaclass_incompatibility {
 
     if ($self->_single_metaclass_can_be_made_compatible($super_meta, $metaclass_type)) {
         ($self->is_pristine)
-            || throw_exception( CannotFixMetaclassCompatibility => class          => $self,
+            || $self->_throw_exception( CannotFixMetaclassCompatibility => class_name     => $self->name,
                                                                    superclass     => $super_meta,
                                                                    metaclass_type => $metaclass_type
                               );
@@ -419,19 +415,19 @@ sub create {
     my %options = @args;
 
     (ref $options{superclasses} eq 'ARRAY')
-        || throw_exception( CreateMOPClassTakesArrayRefOfSuperclasses => class  => $class,
+        || __PACKAGE__->_throw_exception( CreateMOPClassTakesArrayRefOfSuperclasses => class  => $class,
                                                                          params => \%options
                           )
             if exists $options{superclasses};
 
     (ref $options{attributes} eq 'ARRAY')
-        || throw_exception( CreateMOPClassTakesArrayRefOfAttributes => class  => $class,
+        || __PACKAGE__->_throw_exception( CreateMOPClassTakesArrayRefOfAttributes => class  => $class,
                                                                        params => \%options
                           )
             if exists $options{attributes};
 
     (ref $options{methods} eq 'HASH')
-        || throw_exception( CreateMOPClassTakesHashRefOfMethods => class  => $class,
+        || __PACKAGE__->_throw_exception( CreateMOPClassTakesHashRefOfMethods => class  => $class,
                                                                    params => \%options
                           )
             if exists $options{methods};
@@ -510,16 +506,16 @@ sub _construct_instance {
     my $instance;
     if (my $instance_class = blessed($params->{__INSTANCE__})) {
         ($instance_class eq $class->name)
-            || throw_exception( InstanceBlessedIntoWrongClass => class    => $class,
-                                                                 params   => $params,
-                                                                 instance => $params->{__INSTANCE__}
+            || $class->_throw_exception( InstanceBlessedIntoWrongClass => class_name => $class->name,
+                                                                 params     => $params,
+                                                                 instance   => $params->{__INSTANCE__}
                               );
         $instance = $params->{__INSTANCE__};
     }
     elsif (exists $params->{__INSTANCE__}) {
-        throw_exception( InstanceMustBeABlessedReference => class    => $class,
-                                                            params   => $params,
-                                                            instance => $params->{__INSTANCE__}
+        $class->_throw_exception( InstanceMustBeABlessedReference => class_name => $class->name,
+                                                            params     => $params,
+                                                            instance   => $params->{__INSTANCE__}
                        );
     }
     else {
@@ -767,8 +763,8 @@ sub clone_object {
     my $class    = shift;
     my $instance = shift;
     (blessed($instance) && $instance->isa($class->name))
-        || throw_exception( CloneObjectExpectsAnInstanceOfMetaclass => class    => $class,
-                                                                       instance => $instance
+        || $class->_throw_exception( CloneObjectExpectsAnInstanceOfMetaclass => class_name => $class->name,
+                                                                       instance   => $instance,
                           );
     # NOTE:
     # we need to protect the integrity of the
@@ -781,9 +777,9 @@ sub clone_object {
 sub _clone_instance {
     my ($class, $instance, %params) = @_;
     (blessed($instance))
-        || throw_exception( OnlyInstancesCanBeCloned => class    => $class,
-                                                        instance => $instance,
-                                                        params   => \%params
+        || $class->_throw_exception( OnlyInstancesCanBeCloned => class_name => $class->name,
+                                                        instance   => $instance,
+                                                        params     => \%params
                           );
     my $meta_instance = $class->get_meta_instance();
     my $clone = $meta_instance->clone_instance($instance);
@@ -828,9 +824,10 @@ sub rebless_instance {
 
     my $old_class = $old_metaclass ? $old_metaclass->name : blessed($instance);
     $self->name->isa($old_class)
-        || throw_exception( CanReblessOnlyIntoASubclass => class    => $self,
-                                                           instance => $instance,
-                                                           params   => \%params
+        || $self->_throw_exception( CanReblessOnlyIntoASubclass => class_name     => $self->name,
+                                                           instance       => $instance,
+                                                           instance_class => blessed( $instance ),
+                                                           params         => \%params,
                           );
 
     $self->_force_rebless_instance($_[1], %params);
@@ -844,8 +841,9 @@ sub rebless_instance_back {
     my $old_class
         = $old_metaclass ? $old_metaclass->name : blessed($instance);
     $old_class->isa( $self->name )
-        || throw_exception( CanReblessOnlyIntoASuperclass => class    => $self,
-                                                             instance => $instance,
+        || $self->_throw_exception( CanReblessOnlyIntoASuperclass => class_name     => $self->name,
+                                                             instance       => $instance,
+                                                             instance_class => blessed( $instance ),
                           );
 
     $self->_force_rebless_instance($_[1]);
@@ -1060,7 +1058,7 @@ sub _method_lookup_order {
             $method = $self->find_next_method_by_name($method_name);
             # die if it does not exist
             (defined $method)
-                || throw_exception( MethodNameNotFoundInInheritanceHierarchy => class       => $self,
+                || $self->_throw_exception( MethodNameNotFoundInInheritanceHierarchy => class_name  => $self->name,
                                                                                 method_name => $method_name
                                   );
             # and now make sure to wrap it
@@ -1085,7 +1083,7 @@ sub _method_lookup_order {
     sub add_before_method_modifier {
         my ($self, $method_name, $method_modifier) = @_;
         (defined $method_name && length $method_name)
-            || throw_exception( MethodModifierNeedsMethodName => class => $self );
+            || $self->_throw_exception( MethodModifierNeedsMethodName => class_name => $self->name );
         my $method = $fetch_and_prepare_method->($self, $method_name);
         $method->add_before_modifier(
             subname(':before' => $method_modifier)
@@ -1095,7 +1093,7 @@ sub _method_lookup_order {
     sub add_after_method_modifier {
         my ($self, $method_name, $method_modifier) = @_;
         (defined $method_name && length $method_name)
-            || throw_exception( MethodModifierNeedsMethodName => class => $self );
+            || $self->_throw_exception( MethodModifierNeedsMethodName => class_name => $self->name );
         my $method = $fetch_and_prepare_method->($self, $method_name);
         $method->add_after_modifier(
             subname(':after' => $method_modifier)
@@ -1105,7 +1103,7 @@ sub _method_lookup_order {
     sub add_around_method_modifier {
         my ($self, $method_name, $method_modifier) = @_;
         (defined $method_name && length $method_name)
-            || throw_exception( MethodModifierNeedsMethodName => class => $self );
+            || $self->_throw_exception( MethodModifierNeedsMethodName => class_name => $self->name );
         my $method = $fetch_and_prepare_method->($self, $method_name);
         $method->add_around_modifier(
             subname(':around' => $method_modifier)
@@ -1129,7 +1127,7 @@ sub _method_lookup_order {
 sub find_method_by_name {
     my ($self, $method_name) = @_;
     (defined $method_name && length $method_name)
-        || throw_exception( MethodNameNotGiven => class => $self );
+        || $self->_throw_exception( MethodNameNotGiven => class_name => $self->name );
     foreach my $class ($self->_method_lookup_order) {
         my $method = Class::MOP::Class->initialize($class)->get_method($method_name);
         return $method if defined $method;
@@ -1158,7 +1156,7 @@ sub get_all_method_names {
 sub find_all_methods_by_name {
     my ($self, $method_name) = @_;
     (defined $method_name && length $method_name)
-        || throw_exception( MethodNameNotGiven => class => $self );
+        || $self->_throw_exception( MethodNameNotGiven => class_name => $self->name );
     my @methods;
     foreach my $class ($self->_method_lookup_order) {
         # fetch the meta-class ...
@@ -1175,7 +1173,7 @@ sub find_all_methods_by_name {
 sub find_next_method_by_name {
     my ($self, $method_name) = @_;
     (defined $method_name && length $method_name)
-        || throw_exception( MethodNameNotGiven => class => $self );
+        || $self->_throw_exception( MethodNameNotGiven => class_name => $self->name );
     my @cpl = ($self->_method_lookup_order);
     shift @cpl; # discard ourselves
     foreach my $class (@cpl) {
@@ -1336,8 +1334,8 @@ sub _immutable_metaclass {
     }
 
     my $trait = $args{immutable_trait} = $self->immutable_trait
-        || throw_exception( NoImmutableTraitSpecifiedForClass => class  => $self,
-                                                                 params => \%args
+        || $self->_throw_exception( NoImmutableTraitSpecifiedForClass => class_name => $self->name,
+                                                                 params     => \%args
                           );
 
     my $meta      = $self->meta;
@@ -1474,8 +1472,8 @@ sub _inline_destructor {
     my ( $self, %args ) = @_;
 
     ( exists $args{destructor_class} && defined $args{destructor_class} )
-        || throw_exception( NoDestructorClassSpecified => class  => $self,
-                                                          params => \%args
+        || $self->_throw_exception( NoDestructorClassSpecified => class_name => $self->name,
+                                                          params     => \%args,
                           );
 
     if ( $self->has_method('DESTROY') && ! $args{replace_destructor} ) {
@@ -1528,7 +1526,7 @@ Class::MOP::Class - Class Meta Object
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1604,6 +1602,7 @@ An optional version number for the newly created package.
 =item * authority
 
 An optional authority for the newly created package.
+See L<Class::MOP::Module/authority> for more details.
 
 =item * superclasses
 
@@ -2007,8 +2006,8 @@ L<overload::Overloaded|overload/Public Functions>.
 
 =item B<< $metaclass->get_overloaded_operator($op) >>
 
-Returns the L<Class::MOP::Method::Overload> object corresponding to the
-operator named C<$op>, if one exists for this class.
+Returns the L<Class::MOP::Overload> object corresponding to the operator named
+C<$op>, if one exists for this class.
 
 =item B<< $metaclass->has_overloaded_operator($op) >>
 
@@ -2021,19 +2020,27 @@ L<overload/Overloadable Operations> for the list of valid operator names).
 
 =item B<< $metaclass->get_all_overloaded_operators >>
 
-Returns a list of L<Class::MOP::Method::Overload> objects corresponding to the
+Returns a list of L<Class::MOP::Overload> objects corresponding to the
 operators that have been overloaded.
 
 =item B<< $metaclass->add_overloaded_operator($op, $impl) >>
 
-Overloads the operator C<$op> for this class, with the implementation C<$impl>.
-C<$impl> can be either a coderef or a method name. Corresponds to
+Overloads the operator C<$op> for this class. The C<$impl> can be a coderef, a
+method name, or a L<Class::MOP::Overload> object. Corresponds to
 C<< use overload $op => $impl; >>
 
 =item B<< $metaclass->remove_overloaded_operator($op) >>
 
 Remove overloading for operator C<$op>. Corresponds to C<< no overload $op; >>
 
+=item B<< $metaclass->get_overload_fallback_value >>
+
+Returns the overload C<fallback> setting for the package.
+
+=item B<< $metaclass->set_overload_fallback_value($fallback) >>
+
+Sets the overload C<fallback> setting for the package.
+
 =back
 
 =head2 Class Immutability
@@ -1,8 +1,5 @@
 package Class::MOP::Deprecated;
-BEGIN {
-  $Class::MOP::Deprecated::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Deprecated::VERSION = '2.1204';
+$Class::MOP::Deprecated::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -26,7 +23,7 @@ Class::MOP::Deprecated - Manages deprecation warnings for Class::MOP
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,9 +1,5 @@
-
 package Class::MOP::Instance;
-BEGIN {
-  $Class::MOP::Instance::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Instance::VERSION = '2.1204';
+$Class::MOP::Instance::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -288,7 +284,7 @@ Class::MOP::Instance - Instance Meta Object
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,41 +1,34 @@
-
 package Class::MOP::Method::Accessor;
-BEGIN {
-  $Class::MOP::Method::Accessor::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Method::Accessor::VERSION = '2.1204';
+$Class::MOP::Method::Accessor::VERSION = '2.1402';
 use strict;
 use warnings;
 
-use Carp         'confess';
 use Scalar::Util 'blessed', 'weaken';
 use Try::Tiny;
 
 use parent 'Class::MOP::Method::Generated';
 
-use Moose::Util 'throw_exception';
-
 sub new {
     my $class   = shift;
     my %options = @_;
 
     (exists $options{attribute})
-        || throw_exception( MustSupplyAnAttributeToConstructWith => params => \%options,
+        || $class->_throw_exception( MustSupplyAnAttributeToConstructWith => params => \%options,
                                                                     class  => $class,
                           );
 
     (exists $options{accessor_type})
-        || throw_exception( MustSupplyAnAccessorTypeToConstructWith => params => \%options,
+        || $class->_throw_exception( MustSupplyAnAccessorTypeToConstructWith => params => \%options,
                                                                        class  => $class,
                           );
 
     (blessed($options{attribute}) && $options{attribute}->isa('Class::MOP::Attribute'))
-        || throw_exception( MustSupplyAClassMOPAttributeInstance => params => \%options,
+        || $class->_throw_exception( MustSupplyAClassMOPAttributeInstance => params => \%options,
                                                                     class  => $class
                           );
 
     ($options{package_name} && $options{name})
-        || throw_exception( MustSupplyPackageNameAndName => params => \%options,
+        || $class->_throw_exception( MustSupplyPackageNameAndName => params => \%options,
                                                             class  => $class
                           );
 
@@ -126,7 +119,7 @@ sub _generate_accessor_method_inline {
         ]);
     }
     catch {
-        throw_exception( CouldNotGenerateInlineAttributeMethod => instance => $self,
+        $self->_throw_exception( CouldNotGenerateInlineAttributeMethod => instance => $self,
                                                                   error    => $_,
                                                                   option   => "accessor"
                        );
@@ -139,9 +132,9 @@ sub _generate_reader_method {
     my $class = $attr->associated_class;
 
     return sub {
-        throw_exception( CannotAssignValueToReadOnlyAccessor => class     => $class,
-                                                                value     => $_[1],
-                                                                attribute => $attr
+        $self->_throw_exception( CannotAssignValueToReadOnlyAccessor => class_name => $class->name,
+                                                                value      => $_[1],
+                                                                attribute  => $attr
                        )
             if @_ > 1;
         $attr->get_value($_[0]);
@@ -157,7 +150,7 @@ sub _generate_reader_method_inline {
         $self->_compile_code([
             'sub {',
                 'if (@_ > 1) {',
-                    $self->_inline_throw_exception( "CannotAssignValueToReadOnlyAccessor => ".
+                    $self->_inline_throw_exception( CannotAssignValueToReadOnlyAccessor =>
                                                     'class_name                          => ref $_[0],'.
                                                     'value                               => $_[1],'.
                                                     "attribute_name                      => '".$attr_name."'",
@@ -168,7 +161,7 @@ sub _generate_reader_method_inline {
         ]);
     }
     catch {
-        throw_exception( CouldNotGenerateInlineAttributeMethod => instance => $self,
+        $self->_throw_exception( CouldNotGenerateInlineAttributeMethod => instance => $self,
                                                                   error    => $_,
                                                                   option   => "reader"
                        );
@@ -176,8 +169,8 @@ sub _generate_reader_method_inline {
 }
 
 sub _inline_throw_exception {
-    my ( $self, $throw_args ) = @_;
-    return 'require Moose::Util; Moose::Util::throw_exception('.$throw_args.')';
+    my ( $self, $exception_type, $throw_args ) = @_;
+    return 'die Module::Runtime::use_module("Moose::Exception::' . $exception_type . '")->new(' . ($throw_args || '') . ')';
 }
 
 sub _generate_writer_method {
@@ -201,7 +194,7 @@ sub _generate_writer_method_inline {
         ]);
     }
     catch {
-        throw_exception( CouldNotGenerateInlineAttributeMethod => instance => $self,
+        $self->_throw_exception( CouldNotGenerateInlineAttributeMethod => instance => $self,
                                                                   error    => $_,
                                                                   option   => "writer"
                        );
@@ -229,7 +222,7 @@ sub _generate_predicate_method_inline {
         ]);
     }
     catch {
-        throw_exception( CouldNotGenerateInlineAttributeMethod => instance => $self,
+        $self->_throw_exception( CouldNotGenerateInlineAttributeMethod => instance => $self,
                                                                   error    => $_,
                                                                   option   => "predicate"
                        );
@@ -257,7 +250,7 @@ sub _generate_clearer_method_inline {
         ]);
     }
     catch {
-        throw_exception( CouldNotGenerateInlineAttributeMethod => instance => $self,
+        $self->_throw_exception( CouldNotGenerateInlineAttributeMethod => instance => $self,
                                                                   error    => $_,
                                                                   option   => "clearer"
                        );
@@ -280,7 +273,7 @@ Class::MOP::Method::Accessor - Method Meta Object for accessors
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,31 +1,25 @@
-
 package Class::MOP::Method::Constructor;
-BEGIN {
-  $Class::MOP::Method::Constructor::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Method::Constructor::VERSION = '2.1204';
+$Class::MOP::Method::Constructor::VERSION = '2.1402';
 use strict;
 use warnings;
 
-use Carp         'confess';
 use Scalar::Util 'blessed', 'weaken';
 use Try::Tiny;
 
 use parent 'Class::MOP::Method::Inlined';
 
-use Moose::Util 'throw_exception';
 sub new {
     my $class   = shift;
     my %options = @_;
 
     (blessed $options{metaclass} && $options{metaclass}->isa('Class::MOP::Class'))
-        || throw_exception( MustSupplyAMetaclass => params => \%options,
+        || $class->_throw_exception( MustSupplyAMetaclass => params => \%options,
                                                     class  => $class
                           )
             if $options{is_inline};
 
     ($options{package_name} && $options{name})
-        || throw_exception( MustSupplyPackageNameAndName => params => \%options,
+        || $class->_throw_exception( MustSupplyPackageNameAndName => params => \%options,
                                                             class  => $class
                           );
 
@@ -113,7 +107,7 @@ sub _generate_constructor_method_inline {
     }
     catch {
         my $source = join("\n", @source);
-        throw_exception( CouldNotEvalConstructor => constructor_method => $self,
+        $self->_throw_exception( CouldNotEvalConstructor => constructor_method => $self,
                                                     source             => $source,
                                                     error              => $_
                        );
@@ -138,7 +132,7 @@ Class::MOP::Method::Constructor - Method Meta Object for constructors
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,9 +1,5 @@
-
 package Class::MOP::Method::Generated;
-BEGIN {
-  $Class::MOP::Method::Generated::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Method::Generated::VERSION = '2.1204';
+$Class::MOP::Method::Generated::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -11,16 +7,14 @@ use Eval::Closure;
 
 use parent 'Class::MOP::Method';
 
-use Moose::Util 'throw_exception';
-
 ## accessors
 
 sub new {
-    throw_exception( CannotCallAnAbstractBaseMethod => package_name => __PACKAGE__ );
+    $_[0]->_throw_exception( CannotCallAnAbstractBaseMethod => package_name => __PACKAGE__ );
 }
 
 sub _initialize_body {
-    throw_exception( NoBodyToInitializeInAnAbstractBaseClass => package_name => __PACKAGE__ );
+    $_[0]->_throw_exception( NoBodyToInitializeInAnAbstractBaseClass => package_name => __PACKAGE__ );
 }
 
 sub _generate_description {
@@ -81,7 +75,7 @@ Class::MOP::Method::Generated - Abstract base class for generated methods
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,12 +1,9 @@
 package Class::MOP::Method::Inlined;
-BEGIN {
-  $Class::MOP::Method::Inlined::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Method::Inlined::VERSION = '2.1204';
+$Class::MOP::Method::Inlined::VERSION = '2.1402';
 use strict;
 use warnings;
 
-use Scalar::Util 'blessed', 'weaken', 'looks_like_number', 'refaddr';
+use Scalar::Util 'refaddr';
 
 use parent 'Class::MOP::Method::Generated';
 
@@ -121,7 +118,7 @@ Class::MOP::Method::Inlined - Method base class for methods which have been inli
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,9 +1,5 @@
-
 package Class::MOP::Method::Meta;
-BEGIN {
-  $Class::MOP::Method::Meta::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Method::Meta::VERSION = '2.1204';
+$Class::MOP::Method::Meta::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -51,8 +47,7 @@ sub wrap {
 
     unshift @args, 'body' if @args % 2 == 1;
     my %params = @args;
-    require Moose::Util;
-    Moose::Util::throw_exception( CannotOverrideBodyOfMetaMethods => params => \%params,
+    $class->_throw_exception( CannotOverrideBodyOfMetaMethods => params => \%params,
                                                                      class  => $class
                                 )
         if $params{body};
@@ -97,7 +92,7 @@ Class::MOP::Method::Meta - Method Meta Object for C<meta> methods
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,144 +0,0 @@
-
-package Class::MOP::Method::Overload;
-BEGIN {
-  $Class::MOP::Method::Overload::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Method::Overload::VERSION = '2.1204';
-use strict;
-use warnings;
-
-use Carp 'confess';
-
-use parent 'Class::MOP::Method';
-
-sub wrap {
-    my $class = shift;
-    my (@args) = @_;
-    unshift @args, 'body' if @args % 2 == 1;
-    my %params = @args;
-
-    require Moose::Util;
-    Moose::Util::throw_exception( OperatorIsRequired => params => \%params,
-                                                        class  => $class
-                                )
-        unless exists $params{operator};
-
-    return $class->SUPER::wrap(
-        name => "($params{operator}",
-        %params,
-    );
-}
-
-sub _new {
-    my $class = shift;
-    return Class::MOP::Class->initialize($class)->new_object(@_)
-        if $class ne __PACKAGE__;
-
-    my $params = @_ == 1 ? $_[0] : {@_};
-
-    return bless {
-        # inherited from Class::MOP::Method
-        'body'                 => $params->{body},
-        'associated_metaclass' => $params->{associated_metaclass},
-        'package_name'         => $params->{package_name},
-        'name'                 => $params->{name},
-        'original_method'      => $params->{original_method},
-
-        # defined in this class
-        'operator'             => $params->{operator},
-    } => $class;
-}
-
-1;
-
-# ABSTRACT: Method Meta Object for methods which implement overloading
-
-__END__
-
-=pod
-
-=encoding UTF-8
-
-=head1 NAME
-
-Class::MOP::Method::Overload - Method Meta Object for methods which implement overloading
-
-=head1 VERSION
-
-version 2.1204
-
-=head1 DESCRIPTION
-
-This is a L<Class::MOP::Method> subclass which represents methods that
-implement overloading.
-
-=head1 METHODS
-
-=over 4
-
-=item B<< Class::MOP::Method::Overload->wrap($metamethod, %options) >>
-
-This is the constructor. The options accepted are identical to the ones
-accepted by L<Class::MOP::Method>, except that it also required an C<operator>
-parameter, which should be an operator as defined by the L<overload> pragma.
-
-=item B<< $metamethod->operator >>
-
-This returns the operator that was passed to new.
-
-=back
-
-=head1 AUTHORS
-
-=over 4
-
-=item *
-
-Stevan Little <stevan.little@iinteractive.com>
-
-=item *
-
-Dave Rolsky <autarch@urth.org>
-
-=item *
-
-Jesse Luehrs <doy@tozt.net>
-
-=item *
-
-Shawn M Moore <code@sartak.org>
-
-=item *
-
-יובל קוג'מן (Yuval Kogman) <nothingmuch@woobling.org>
-
-=item *
-
-Karen Etheridge <ether@cpan.org>
-
-=item *
-
-Florian Ragwitz <rafl@debian.org>
-
-=item *
-
-Hans Dieter Pearcey <hdp@weftsoar.net>
-
-=item *
-
-Chris Prather <chris@prather.org>
-
-=item *
-
-Matt S Trout <mst@shadowcat.co.uk>
-
-=back
-
-=head1 COPYRIGHT AND LICENSE
-
-This software is copyright (c) 2006 by Infinity Interactive, Inc..
-
-This is free software; you can redistribute it and/or modify it under
-the same terms as the Perl 5 programming language system itself.
-
-=cut
@@ -1,9 +1,5 @@
-
 package Class::MOP::Method::Wrapped;
-BEGIN {
-  $Class::MOP::Method::Wrapped::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Method::Wrapped::VERSION = '2.1204';
+$Class::MOP::Method::Wrapped::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -11,8 +7,6 @@ use Scalar::Util 'blessed';
 
 use parent 'Class::MOP::Method';
 
-use Moose::Util 'throw_exception';
-
 # NOTE:
 # this ugly beast is the result of trying
 # to micro optimize this as much as possible
@@ -72,7 +66,7 @@ sub wrap {
     my ( $class, $code, %params ) = @_;
 
     (blessed($code) && $code->isa('Class::MOP::Method'))
-        || throw_exception( CanOnlyWrapBlessedCode => params => \%params,
+        || $class->_throw_exception( CanOnlyWrapBlessedCode => params => \%params,
                                                       class  => $class,
                                                       code   => $code
                           );
@@ -216,7 +210,7 @@ Class::MOP::Method::Wrapped - Method Meta Object for methods with before/after/a
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,9 +1,5 @@
-
 package Class::MOP::Method;
-BEGIN {
-  $Class::MOP::Method::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Method::VERSION = '2.1204';
+$Class::MOP::Method::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -26,7 +22,6 @@ sub wrap {
     my %params = @args;
     my $code = $params{body};
 
-    require Moose::Util;
     if (blessed($code) && $code->isa(__PACKAGE__)) {
         my $method = $code->clone;
         delete $params{body};
@@ -34,14 +29,14 @@ sub wrap {
         return $method;
     }
     elsif (!ref $code || 'CODE' ne reftype($code)) {
-        Moose::Util::throw_exception( WrapTakesACodeRefToBless => params => \%params,
+        $class->_throw_exception( WrapTakesACodeRefToBless => params => \%params,
                                                                   class  => $class,
                                                                   code   => $code
                                     );
     }
 
     ($params{package_name} && $params{name})
-        || Moose::Util::throw_exception( PackageNameAndNameParamsNotGivenToWrap => params => \%params,
+        || $class->_throw_exception( PackageNameAndNameParamsNotGivenToWrap => params => \%params,
                                                                                    class  => $class,
                                                                                    code   => $code
                                        );
@@ -159,7 +154,7 @@ Class::MOP::Method - Method Meta Object
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -213,7 +208,7 @@ This returns a reference to the method's subroutine.
 
 =item B<< $metamethod->name >>
 
-This returns the method's name
+This returns the method's name.
 
 =item B<< $metamethod->package_name >>
 
@@ -1,8 +1,5 @@
 package Class::MOP::MiniTrait;
-BEGIN {
-  $Class::MOP::MiniTrait::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::MiniTrait::VERSION = '2.1204';
+$Class::MOP::MiniTrait::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -18,6 +15,7 @@ sub apply {
 
     for my $meth ( grep { $_->package_name ne 'UNIVERSAL' } $trait->get_all_methods ) {
         my $meth_name = $meth->name;
+        next if index($meth_name, '__') == 0;   # skip private subs
 
         if ( $to_class->find_method_by_name($meth_name) ) {
             $to_class->add_around_method_modifier( $meth_name, $meth->body );
@@ -50,7 +48,7 @@ Class::MOP::MiniTrait - Extremely limited trait application
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,8 +1,5 @@
 package Class::MOP::Mixin::AttributeCore;
-BEGIN {
-  $Class::MOP::Mixin::AttributeCore::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Mixin::AttributeCore::VERSION = '2.1204';
+$Class::MOP::Mixin::AttributeCore::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -64,7 +61,7 @@ Class::MOP::Mixin::AttributeCore - Core attributes shared by attribute metaclass
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,8 +1,5 @@
 package Class::MOP::Mixin::HasAttributes;
-BEGIN {
-  $Class::MOP::Mixin::HasAttributes::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Mixin::HasAttributes::VERSION = '2.1204';
+$Class::MOP::Mixin::HasAttributes::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -10,8 +7,6 @@ use Scalar::Util 'blessed';
 
 use parent 'Class::MOP::Mixin';
 
-use Moose::Util 'throw_exception';
-
 sub add_attribute {
     my $self = shift;
 
@@ -19,8 +14,8 @@ sub add_attribute {
         = blessed( $_[0] ) ? $_[0] : $self->attribute_metaclass->new(@_);
 
     ( $attribute->isa('Class::MOP::Mixin::AttributeCore') )
-        || throw_exception( AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass => attribute => $attribute,
-                                                                                     class     => $self
+        || $self->_throw_exception( AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass => attribute  => $attribute,
+                                                                                     class_name => $self->name,
                           );
 
     $self->_attach_attribute($attribute);
@@ -50,7 +45,7 @@ sub has_attribute {
     my ( $self, $attribute_name ) = @_;
 
     ( defined $attribute_name )
-        || throw_exception( MustDefineAnAttributeName => class => $self );
+        || $self->_throw_exception( MustDefineAnAttributeName => class_name => $self->name );
 
     exists $self->_attribute_map->{$attribute_name};
 }
@@ -59,7 +54,7 @@ sub get_attribute {
     my ( $self, $attribute_name ) = @_;
 
     ( defined $attribute_name )
-        || throw_exception( MustDefineAnAttributeName => class => $self );
+        || $self->_throw_exception( MustDefineAnAttributeName => class_name => $self->name );
 
     return $self->_attribute_map->{$attribute_name};
 }
@@ -68,7 +63,7 @@ sub remove_attribute {
     my ( $self, $attribute_name ) = @_;
 
     ( defined $attribute_name )
-        || throw_exception( MustDefineAnAttributeName => class => $self );
+        || $self->_throw_exception( MustDefineAnAttributeName => class_name => $self->name );
 
     my $removed_attribute = $self->_attribute_map->{$attribute_name};
     return unless defined $removed_attribute;
@@ -111,7 +106,7 @@ Class::MOP::Mixin::HasAttributes - Methods for metaclasses which have attributes
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,21 +1,14 @@
 package Class::MOP::Mixin::HasMethods;
-BEGIN {
-  $Class::MOP::Mixin::HasMethods::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Mixin::HasMethods::VERSION = '2.1204';
+$Class::MOP::Mixin::HasMethods::VERSION = '2.1402';
 use strict;
 use warnings;
 
 use Class::MOP::Method::Meta;
-use Class::MOP::Method::Overload;
 
 use Scalar::Util 'blessed', 'reftype';
-use Sub::Name    'subname';
-
-use overload ();
+use Sub::Name 'subname';
 
 use parent 'Class::MOP::Mixin';
-require Moose::Util;
 
 sub _meta_method_class { 'Class::MOP::Method::Meta' }
 
@@ -40,7 +33,7 @@ sub wrap_method_body {
     my ( $self, %args ) = @_;
 
     ( $args{body} && 'CODE' eq reftype $args{body} )
-        || Moose::Util::throw_exception( CodeBlockMustBeACodeRef => instance => $self,
+        || $self->_throw_exception( CodeBlockMustBeACodeRef => instance => $self,
                                                                     params   => \%args
                                        );
     $self->method_metaclass->wrap(
@@ -52,7 +45,7 @@ sub wrap_method_body {
 sub add_method {
     my ( $self, $method_name, $method ) = @_;
     ( defined $method_name && length $method_name )
-        || Moose::Util::throw_exception( MustDefineAMethodName => instance => $self );
+        || $self->_throw_exception( MustDefineAMethodName => instance => $self );
 
     my $package_name = $self->name;
 
@@ -100,7 +93,7 @@ sub has_method {
     my ( $self, $method_name ) = @_;
 
     ( defined $method_name && length $method_name )
-        || Moose::Util::throw_exception( MustDefineAMethodName => instance => $self );
+        || $self->_throw_exception( MustDefineAMethodName => instance => $self );
 
     my $method = $self->_get_maybe_raw_method($method_name)
         or return;
@@ -112,7 +105,7 @@ sub get_method {
     my ( $self, $method_name ) = @_;
 
     ( defined $method_name && length $method_name )
-        || Moose::Util::throw_exception( MustDefineAMethodName => instance => $self );
+        || $self->_throw_exception( MustDefineAMethodName => instance => $self );
 
     my $method = $self->_get_maybe_raw_method($method_name)
         or return;
@@ -143,7 +136,7 @@ sub remove_method {
     my ( $self, $method_name ) = @_;
 
     ( defined $method_name && length $method_name )
-        || Moose::Util::throw_exception( MustDefineAMethodName => instance => $self );
+        || $self->_throw_exception( MustDefineAMethodName => instance => $self );
 
     my $removed_method = delete $self->_method_map->{$method_name};
 
@@ -230,97 +223,6 @@ sub _full_method_map {
     return $self->_method_map;
 }
 
-# overloading
-
-my $overload_operators;
-sub overload_operators {
-    $overload_operators ||= [map { split /\s+/ } values %overload::ops];
-    return @$overload_operators;
-}
-
-sub is_overloaded {
-    my $self = shift;
-    return overload::Overloaded($self->name);
-}
-
-# XXX this could probably stand to be cached, but i figure it should be
-# uncommon enough to not particularly matter
-sub _overload_map {
-    my $self = shift;
-
-    return {} unless $self->is_overloaded;
-
-    my %map;
-    for my $op ($self->overload_operators) {
-        my $body = $self->_get_overloaded_operator_body($op);
-        next unless defined $body;
-        $map{$op} = $body;
-    }
-
-    return \%map;
-}
-
-sub get_overload_list {
-    my $self = shift;
-    return keys %{ $self->_overload_map };
-}
-
-sub get_all_overloaded_operators {
-    my $self = shift;
-    my $map = $self->_overload_map;
-    return map { $self->_wrap_overload($_, $map->{$_}) } keys %$map;
-}
-
-sub has_overloaded_operator {
-    my $self = shift;
-    my ($op) = @_;
-    return defined $self->_get_overloaded_operator_body($op);
-}
-
-sub get_overloaded_operator {
-    my $self = shift;
-    my ($op) = @_;
-    my $body = $self->_get_overloaded_operator_body($op);
-    return unless defined $body;
-    return $self->_wrap_overload($op, $body);
-}
-
-sub add_overloaded_operator {
-    my $self = shift;
-    my ($op, $body) = @_;
-    $self->name->overload::OVERLOAD($op => $body);
-}
-
-sub remove_overloaded_operator {
-    my $self = shift;
-    my ($op) = @_;
-
-    if ( $] < 5.018 ) {
-        # ugh, overload.pm provides no api for this - but the problem that
-        # makes this necessary has been fixed in 5.18
-        $self->get_or_add_package_symbol('%OVERLOAD')->{dummy}++;
-    }
-
-    $self->remove_package_symbol('&(' . $op);
-}
-
-sub _get_overloaded_operator_body {
-    my $self = shift;
-    my ($op) = @_;
-    return overload::Method($self->name, $op);
-}
-
-sub _wrap_overload {
-    my $self = shift;
-    my ($op, $body) = @_;
-    return Class::MOP::Method::Overload->wrap(
-        operator             => $op,
-        package_name         => $self->name,
-        associated_metaclass => $self,
-        body                 => $body,
-    );
-}
-
 1;
 
 # ABSTRACT: Methods for metaclasses which have methods
@@ -337,13 +239,13 @@ Class::MOP::Mixin::HasMethods - Methods for metaclasses which have methods
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
 This class implements methods for metaclasses which have methods
-(L<Class::MOP::Package> and L<Moose::Meta::Role>). See L<Class::MOP::Package>
-for API details.
+(L<Class::MOP::Class> and L<Moose::Meta::Role>). See L<Class::MOP::Class> for
+API details.
 
 =head1 AUTHORS
 
@@ -0,0 +1,236 @@
+package Class::MOP::Mixin::HasOverloads;
+$Class::MOP::Mixin::HasOverloads::VERSION = '2.1402';
+use strict;
+use warnings;
+
+use Class::MOP::Overload;
+
+use Devel::OverloadInfo 'overload_info';
+use Scalar::Util 'blessed';
+use Sub::Identify 'sub_name', 'stash_name';
+
+use overload ();
+
+use parent 'Class::MOP::Mixin';
+
+sub is_overloaded {
+    my $self = shift;
+    return overload::Overloaded($self->name);
+}
+
+sub get_overload_list {
+    my $self = shift;
+
+    my $info = $self->_overload_info;
+    return grep { $_ ne 'fallback' } keys %{$info}
+}
+
+sub get_all_overloaded_operators {
+    my $self = shift;
+    return map { $self->_overload_for($_) } $self->get_overload_list;
+}
+
+sub has_overloaded_operator {
+    my $self = shift;
+    my ($op) = @_;
+    return defined $self->_overload_info->{$op};
+}
+
+sub _overload_map {
+    $_[0]->{_overload_map} ||= {};
+}
+
+sub get_overloaded_operator {
+    my $self = shift;
+    my ($op) = @_;
+    return $self->_overload_map->{$op} ||= $self->_overload_for($op);
+}
+
+use constant _SET_FALLBACK_EACH_TIME => $] < 5.120;
+
+sub add_overloaded_operator {
+    my $self = shift;
+    my ( $op, $overload ) = @_;
+
+    my %p = ( associated_metaclass => $self );
+    if ( !ref $overload ) {
+        %p = (
+            %p,
+            operator             => $op,
+            method_name          => $overload,
+            associated_metaclass => $self,
+        );
+        $p{method} = $self->get_method($overload)
+            if $self->has_method($overload);
+        $overload = Class::MOP::Overload->new(%p);
+    }
+    elsif ( !blessed $overload) {
+        $overload = Class::MOP::Overload->new(
+            operator        => $op,
+            coderef         => $overload,
+            coderef_name    => sub_name($overload),
+            coderef_package => stash_name($overload),
+            %p,
+        );
+    }
+
+    $overload->attach_to_class($self);
+    $self->_overload_map->{$op} = $overload;
+
+    my %overload = (
+          $op => $overload->has_coderef
+        ? $overload->coderef
+        : $overload->method_name
+    );
+
+    # Perl 5.10 and earlier appear to have a bug where setting a new
+    # overloading operator wipes out the fallback value unless we pass it each
+    # time.
+    if (_SET_FALLBACK_EACH_TIME) {
+        $overload{fallback} = $self->get_overload_fallback_value;
+    }
+
+    $self->name->overload::OVERLOAD(%overload);
+}
+
+sub remove_overloaded_operator {
+    my $self = shift;
+    my ($op) = @_;
+
+    delete $self->_overload_map->{$op};
+
+    # overload.pm provides no api for this - but the problem that makes this
+    # necessary has been fixed in 5.18
+    $self->get_or_add_package_symbol('%OVERLOAD')->{dummy}++
+        if $] < 5.017000;
+
+    $self->remove_package_symbol('&(' . $op);
+}
+
+sub get_overload_fallback_value {
+    my $self = shift;
+    return $self->_overload_info->{fallback}{value};
+}
+
+sub set_overload_fallback_value {
+    my $self  = shift;
+    my $value = shift;
+
+    $self->name->overload::OVERLOAD( fallback => $value );
+}
+
+# We could cache this but we'd need some logic to clear it at all the right
+# times, which seems more tedious than it's worth.
+sub _overload_info {
+    my $self = shift;
+    return overload_info( $self->name ) || {};
+}
+
+sub _overload_for {
+    my $self = shift;
+    my $op   = shift;
+
+    my $map = $self->_overload_map;
+    return $map->{$op} if $map->{$op};
+
+    my $info = $self->_overload_info->{$op};
+    return unless $info;
+
+    my %p = (
+        operator             => $op,
+        associated_metaclass => $self,
+    );
+
+    if ( $info->{code} && !$info->{method_name} ) {
+        $p{coderef} = $info->{code};
+        @p{ 'coderef_package', 'coderef_name' }
+            = $info->{code_name} =~ /(.+)::([^:]+)/;
+    }
+    else {
+        $p{method_name} = $info->{method_name};
+        if ( $self->has_method( $p{method_name} ) ) {
+            $p{method} = $self->get_method( $p{method_name} );
+        }
+    }
+
+    return $map->{$op} = Class::MOP::Overload->new(%p);
+}
+
+1;
+
+# ABSTRACT: Methods for metaclasses which have overloads
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Class::MOP::Mixin::HasOverloads - Methods for metaclasses which have overloads
+
+=head1 VERSION
+
+version 2.1402
+
+=head1 DESCRIPTION
+
+This class implements methods for metaclasses which have overloads
+(L<Class::MOP::Clas> and L<Moose::Meta::Role>). See L<Class::MOP::Class> for
+API details.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Stevan Little <stevan.little@iinteractive.com>
+
+=item *
+
+Dave Rolsky <autarch@urth.org>
+
+=item *
+
+Jesse Luehrs <doy@tozt.net>
+
+=item *
+
+Shawn M Moore <code@sartak.org>
+
+=item *
+
+יובל קוג'מן (Yuval Kogman) <nothingmuch@woobling.org>
+
+=item *
+
+Karen Etheridge <ether@cpan.org>
+
+=item *
+
+Florian Ragwitz <rafl@debian.org>
+
+=item *
+
+Hans Dieter Pearcey <hdp@weftsoar.net>
+
+=item *
+
+Chris Prather <chris@prather.org>
+
+=item *
+
+Matt S Trout <mst@shadowcat.co.uk>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2006 by Infinity Interactive, Inc..
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,18 +1,21 @@
 package Class::MOP::Mixin;
-BEGIN {
-  $Class::MOP::Mixin::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Mixin::VERSION = '2.1204';
+$Class::MOP::Mixin::VERSION = '2.1402';
 use strict;
 use warnings;
 
 use Scalar::Util 'blessed';
+use Module::Runtime 'use_module';
 
 sub meta {
     require Class::MOP::Class;
     Class::MOP::Class->initialize( blessed( $_[0] ) || $_[0] );
 }
 
+sub _throw_exception {
+    my ($class, $exception_type, @args_to_exception) = @_;
+    die use_module( "Moose::Exception::$exception_type" )->new( @args_to_exception );
+}
+
 1;
 
 # ABSTRACT: Base class for mixin classes
@@ -29,22 +32,26 @@ Class::MOP::Mixin - Base class for mixin classes
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
-This class provides a single method shared by all mixins
+This class provides a few methods which are useful in all metaclasses.
 
 =head1 METHODS
 
-This class provides a few methods which are useful in all metaclasses.
-
 =over 4
 
 =item B<< Class::MOP::Mixin->meta >>
 
 This returns a L<Class::MOP::Class> object for the mixin class.
 
+=item B<< Class::MOP::Mixin->_throw_exception >>
+
+Throws an exception in the L<Moose::Exception> family. This should ONLY be
+used internally -- any callers outside Class::MOP::* should be using the
+version in L<Moose::Util> instead.
+
 =back
 
 =head1 AUTHORS
@@ -1,19 +1,10 @@
-
 package Class::MOP::Module;
-BEGIN {
-  $Class::MOP::Module::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Module::VERSION = '2.1204';
+$Class::MOP::Module::VERSION = '2.1402';
 use strict;
 use warnings;
 
-use Carp         'confess';
-use Scalar::Util 'blessed';
-
 use parent 'Class::MOP::Package';
 
-use Moose::Util 'throw_exception';
-
 sub _new {
     my $class = shift;
     return Class::MOP::Class->initialize($class)->new_object(@_)
@@ -76,7 +67,7 @@ sub _anon_package_prefix { 'Class::MOP::Module::__ANON__::SERIAL::' }
 sub _anon_cache_key {
     my $class = shift;
     my %options = @_;
-    throw_exception( PackagesAndModulesAreNotCachable => class_name => $class,
+    $class->_throw_exception( PackagesAndModulesAreNotCachable => class_name => $class,
                                                          params     => \%options,
                                                          is_module  => 1
                    );
@@ -110,7 +101,7 @@ Class::MOP::Module - Module Meta Object
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -140,6 +131,8 @@ A version number, to be installed in the C<$VERSION> package global variable.
 
 An authority, to be installed in the C<$AUTHORITY> package global variable.
 
+This is a legacy field and its use is not recommended.
+
 =back
 
 =item B<< $metamodule->version >>
@@ -1,30 +1,21 @@
-
 package Class::MOP::Object;
-BEGIN {
-  $Class::MOP::Object::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Object::VERSION = '2.1204';
+$Class::MOP::Object::VERSION = '2.1402';
 use strict;
 use warnings;
 
+use parent 'Class::MOP::Mixin';
 use Scalar::Util 'blessed';
+use Module::Runtime;
 
 # introspection
 
 sub throw_error {
-    shift;
-    require Moose::Util;
-    Moose::Util::throw_exception( Legacy => message => join('', @_) );
+    shift->_throw_exception( Legacy => message => join('', @_) );
 }
 
 sub _inline_throw_error {
     my ( $self, $message ) = @_;
-    return 'Moose->throw_error('.$message.')';
-}
-
-sub meta {
-    require Class::MOP::Class;
-    Class::MOP::Class->initialize(blessed($_[0]) || $_[0]);
+    return 'die Module::Runtime::use_module("Moose::Exception::Legacy")->new(message => ' . $message. ')';
 }
 
 sub _new {
@@ -72,8 +63,7 @@ sub _make_compatible_with {
     my $new_metaclass = $self->_get_compatible_metaclass($other_name);
 
     unless ( defined $new_metaclass ) {
-        require Moose::Util;
-        Moose::Util::throw_exception( CannotMakeMetaclassCompatible => superclass_name => $other_name,
+        $self->_throw_exception( CannotMakeMetaclassCompatible => superclass_name => $other_name,
                                                                        class           => $self,
                                     );
     }
@@ -124,7 +114,7 @@ Class::MOP::Object - Base class for metaclasses
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -148,8 +138,8 @@ default maximum depth is 1.
 
 =item B<< $metaclass->throw_error($message) >>
 
-This method calls L<Moose::Util::throw_exception> internally, with an object
-of class Moose::Exception::Legacy.
+This method calls L<Class::MOP::Mixin/_throw_exception> internally, with an object
+of class L<Moose::Exception::Legacy>.
 
 =back
 
@@ -0,0 +1,341 @@
+package Class::MOP::Overload;
+$Class::MOP::Overload::VERSION = '2.1402';
+use strict;
+use warnings;
+
+use overload ();
+use Scalar::Util qw( blessed weaken );
+use Try::Tiny;
+
+use parent 'Class::MOP::Object';
+
+my %Operators = (
+    map { $_ => 1 }
+    grep { $_ ne 'fallback' }
+    map  { split /\s+/ } values %overload::ops
+);
+
+sub new {
+    my ( $class, %params ) = @_;
+
+    unless ( defined $params{operator} ) {
+        $class->_throw_exception('OverloadRequiresAnOperator');
+    }
+    unless ( $Operators{ $params{operator} } ) {
+        $class->_throw_exception(
+            'InvalidOverloadOperator',
+            operator => $params{operator},
+        );
+    }
+
+    unless ( defined $params{method_name} || $params{coderef} ) {
+        $class->_throw_exception(
+            'OverloadRequiresAMethodNameOrCoderef',
+            operator => $params{operator},
+        );
+    }
+
+    if ( $params{coderef} ) {
+        unless ( defined $params{coderef_package}
+            && defined $params{coderef_name} ) {
+
+            $class->_throw_exception('OverloadRequiresNamesForCoderef');
+        }
+    }
+
+    if ( $params{method}
+        && !try { $params{method}->isa('Class::MOP::Method') } ) {
+
+        $class->_throw_exception('OverloadRequiresAMetaMethod');
+    }
+
+    if ( $params{associated_metaclass}
+        && !try { $params{associated_metaclass}->isa('Class::MOP::Module') } )
+    {
+
+        $class->_throw_exception('OverloadRequiresAMetaClass');
+    }
+
+    my @optional_attrs
+        = qw( method_name coderef coderef_package coderef_name method associated_metaclass );
+
+    return bless {
+        operator => $params{operator},
+        map { defined $params{$_} ? ( $_ => $params{$_} ) : () }
+            @optional_attrs
+        },
+        $class;
+}
+
+sub operator { $_[0]->{operator} }
+
+sub method_name { $_[0]->{method_name} }
+sub has_method_name { exists $_[0]->{method_name} }
+
+sub method { $_[0]->{method} }
+sub has_method { exists $_[0]->{method} }
+
+sub coderef { $_[0]->{coderef} }
+sub has_coderef { exists $_[0]->{coderef} }
+
+sub coderef_package { $_[0]->{coderef_package} }
+sub has_coderef_package { exists $_[0]->{coderef_package} }
+
+sub coderef_name { $_[0]->{coderef_name} }
+sub has_coderef_name { exists $_[0]->{coderef_name} }
+
+sub associated_metaclass { $_[0]->{associated_metaclass} }
+
+sub is_anonymous {
+    my $self = shift;
+    return $self->has_coderef && $self->coderef_name eq '__ANON__';
+}
+
+sub attach_to_class {
+    my ( $self, $class ) = @_;
+    $self->{associated_metaclass} = $class;
+    weaken $self->{associated_metaclass};
+}
+
+sub clone {
+    my $self = shift;
+
+    my $clone = bless { %{$self}, @_ }, blessed($self);
+    weaken $clone->{associated_metaclass} if $clone->{associated_metaclass};
+
+    $clone->_set_original_overload($self);
+
+    return $clone;
+}
+
+sub original_overload { $_[0]->{original_overload} }
+sub _set_original_overload { $_[0]->{original_overload} = $_[1] }
+
+sub _is_equal_to {
+    my $self  = shift;
+    my $other = shift;
+
+    if ( $self->has_coderef ) {
+        return unless $other->has_coderef;
+        return $self->coderef == $other->coderef;
+    }
+    else {
+        return $self->method_name eq $other->method_name;
+    }
+}
+
+1;
+
+# ABSTRACT: Overload Meta Object
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Class::MOP::Overload - Overload Meta Object
+
+=head1 VERSION
+
+version 2.1402
+
+=head1 SYNOPSIS
+
+    my $meta     = Class->meta;
+    my $overload = $meta->get_overloaded_operator('+');
+
+    if ( $overload->has_method_name ) {
+        print 'Method for + is ', $overload->method_name, "\n";
+    }
+    else {
+        print 'Overloading for + is implemented by ',
+            $overload->coderef_name, " sub\n";
+    }
+
+=head1 DESCRIPTION
+
+This class provides meta information for overloading in classes and roles.
+
+=head1 INHERITANCE
+
+C<Class::MOP::Overload> is a subclass of L<Class::MOP::Object>.
+
+=head1 METHODS
+
+This class provides the following methods:
+
+=head2 Class::MOP::Overload->new(%options)
+
+This method creates a new C<Class::MOP::Overload> object. It accepts a number
+of options:
+
+=over 4
+
+=item * operator
+
+This is a string that matches an operator known by the L<overload> module,
+such as C<""> or C<+>. This is required.
+
+=item * method_name
+
+The name of the method which implements the overloading. Note that this does
+not need to actually correspond to a real method, since it's okay to declare a
+not-yet-implemented overloading.
+
+Either this or the C<coderef> option must be passed.
+
+=item * method
+
+A L<Class::MOP::Method> object for the method which implements the
+overloading.
+
+This is optional.
+
+=item * coderef
+
+A coderef which implements the overloading.
+
+Either this or the C<method_name> option must be passed.
+
+=item * coderef_package
+
+The package where the coderef was defined.
+
+This is required if C<coderef> is passed.
+
+=item * coderef_name
+
+The name of the coderef. This can be "__ANON__".
+
+This is required if C<coderef> is passed.
+
+=item * associated_metaclass
+
+A L<Class::MOP::Module> object for the associated class or role.
+
+This is optional.
+
+=back
+
+=head2 $overload->operator
+
+Returns the operator for this overload object.
+
+=head2 $overload->method_name
+
+Returns the method name that implements overloading, if it has one.
+
+=head2 $overload->has_method_name
+
+Returns true if the object has a method name.
+
+=head2 $overload->method
+
+Returns the L<Class::MOP::Method> that implements overloading, if it has one.
+
+=head2 $overload->has_method
+
+Returns true if the object has a method.
+
+=head2 $overload->coderef
+
+Returns the coderef that implements overloading, if it has one.
+
+=head2 $overload->has_coderef
+
+Returns true if the object has a coderef.
+
+=head2 $overload->coderef_package
+
+Returns the package for the coderef that implements overloading, if it has
+one.
+
+=head2 $overload->has_coderef
+
+Returns true if the object has a coderef package.
+
+=head2 $overload->coderef_name
+
+Returns the sub name for the coderef that implements overloading, if it has
+one.
+
+=head2 $overload->has_coderef_name
+
+Returns true if the object has a coderef name.
+
+=head2 $overload->is_anonymous
+
+Returns true if the overloading is implemented by an anonymous coderef.
+
+=head2 $overload->associated_metaclass
+
+Returns the L<Class::MOP::Module> (class or role) that is associated with the
+overload object.
+
+=head2 $overload->clone
+
+Clones the overloading object, setting C<original_overload> in the process.
+
+=head2 $overload->original_overload
+
+For cloned objects, this returns the L<Class::MOP::Overload> object from which
+they were cloned. This can be used to determine the source of an overloading
+in a class that came from a role, for example.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Stevan Little <stevan.little@iinteractive.com>
+
+=item *
+
+Dave Rolsky <autarch@urth.org>
+
+=item *
+
+Jesse Luehrs <doy@tozt.net>
+
+=item *
+
+Shawn M Moore <code@sartak.org>
+
+=item *
+
+יובל קוג'מן (Yuval Kogman) <nothingmuch@woobling.org>
+
+=item *
+
+Karen Etheridge <ether@cpan.org>
+
+=item *
+
+Florian Ragwitz <rafl@debian.org>
+
+=item *
+
+Hans Dieter Pearcey <hdp@weftsoar.net>
+
+=item *
+
+Chris Prather <chris@prather.org>
+
+=item *
+
+Matt S Trout <mst@shadowcat.co.uk>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2006 by Infinity Interactive, Inc..
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,22 +1,15 @@
-
 package Class::MOP::Package;
-BEGIN {
-  $Class::MOP::Package::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::Package::VERSION = '2.1204';
+$Class::MOP::Package::VERSION = '2.1402';
 use strict;
 use warnings;
 
-use Scalar::Util 'blessed', 'reftype', 'weaken';
-use Carp         'confess';
+use Scalar::Util 'blessed', 'weaken';
 use Devel::GlobalDestruction 'in_global_destruction';
 use Module::Runtime 'module_notional_filename';
 use Package::Stash;
 
 use parent 'Class::MOP::Object';
 
-use Moose::Util 'throw_exception';
-
 # creation ...
 
 sub initialize {
@@ -54,7 +47,7 @@ sub reinitialize {
 
     (defined $package_name && $package_name
       && (!blessed $package_name || $package_name->isa('Class::MOP::Package')))
-        || throw_exception( MustPassAPackageNameOrAnExistingClassMOPPackageInstance => params => \%options,
+        || $class->_throw_exception( MustPassAPackageNameOrAnExistingClassMOPPackageInstance => params => \%options,
                                                                                        class  => $class
                           );
 
@@ -136,7 +129,7 @@ sub create {
     sub _anon_cache_key {
         my $class = shift;
         my %options = @_;
-        throw_exception( PackagesAndModulesAreNotCachable => class_name => $class,
+        $class->_throw_exception( PackagesAndModulesAreNotCachable => class_name => $class,
                                                              params     => \%options,
                                                              is_module  => 0
                        );
@@ -289,7 +282,7 @@ Class::MOP::Package - Package Meta Object
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,24 +1,19 @@
-
 package Class::MOP;
-BEGIN {
-  $Class::MOP::AUTHORITY = 'cpan:STEVAN';
-}
-$Class::MOP::VERSION = '2.1204';
+$Class::MOP::VERSION = '2.1402';
 use strict;
 use warnings;
 
 use 5.008003;
 
 use MRO::Compat;
-
 use Class::Load 0.07 ();
-use Scalar::Util  'weaken', 'isweak', 'reftype', 'blessed';
+use Scalar::Util  'weaken', 'isweak', 'blessed';
 use Data::OptList;
-use Try::Tiny;
 
 use Class::MOP::Mixin::AttributeCore;
 use Class::MOP::Mixin::HasAttributes;
 use Class::MOP::Mixin::HasMethods;
+use Class::MOP::Mixin::HasOverloads;
 use Class::MOP::Class;
 use Class::MOP::Attribute;
 use Class::MOP::Method;
@@ -172,7 +167,7 @@ Class::MOP::Mixin::HasMethods->meta->add_attribute(
 );
 
 ## --------------------------------------------------------
-## Class::MOP::Mixin::HasMethods
+## Class::MOP::Mixin::HasAttributes
 
 Class::MOP::Mixin::HasAttributes->meta->add_attribute(
     Class::MOP::Attribute->new('attributes' => (
@@ -204,6 +199,20 @@ Class::MOP::Mixin::HasAttributes->meta->add_attribute(
 );
 
 ## --------------------------------------------------------
+## Class::MOP::Mixin::HasOverloads
+
+Class::MOP::Mixin::HasOverloads->meta->add_attribute(
+    Class::MOP::Attribute->new('_overload_map' => (
+        reader   => {
+            '_overload_map' => \&Class::MOP::Mixin::HasOverloads::_overload_map
+        },
+        clearer => '_clear_overload_map',
+        default => sub { {} },
+        _definition_context(),
+    ))
+);
+
+## --------------------------------------------------------
 ## Class::MOP::Package
 
 Class::MOP::Package->meta->add_attribute(
@@ -620,6 +629,46 @@ Class::MOP::Method::Constructor->meta->add_attribute(
 );
 
 ## --------------------------------------------------------
+## Class::MOP::Overload
+
+Class::MOP::Overload->meta->add_attribute(
+    Class::MOP::Attribute->new(
+        'operator' => (
+            reader   => { 'operator' => \&Class::MOP::Overload::operator },
+            required => 1,
+            _definition_context(),
+        )
+    )
+);
+
+for my $attr (qw( method_name coderef coderef_package coderef_name method )) {
+    Class::MOP::Overload->meta->add_attribute(
+        Class::MOP::Attribute->new(
+            $attr => (
+                reader    => { $attr => Class::MOP::Overload->can($attr) },
+                predicate => {
+                    'has_'
+                        . $attr => Class::MOP::Overload->can( 'has_' . $attr )
+                },
+                _definition_context(),
+            )
+        )
+    );
+}
+
+Class::MOP::Overload->meta->add_attribute(
+    Class::MOP::Attribute->new(
+        'associated_metaclass' => (
+            reader => {
+                'associated_metaclass' =>
+                    \&Class::MOP::Overload::associated_metaclass
+            },
+            _definition_context(),
+        )
+    )
+);
+
+## --------------------------------------------------------
 ## Class::MOP::Instance
 
 # NOTE:
@@ -714,7 +763,8 @@ $_->meta->make_immutable(
     Class::MOP::Method::Wrapped
 
     Class::MOP::Method::Meta
-    Class::MOP::Method::Overload
+
+    Class::MOP::Overload
 /;
 
 $_->meta->make_immutable(
@@ -726,6 +776,7 @@ $_->meta->make_immutable(
     Class::MOP::Mixin::AttributeCore
     Class::MOP::Mixin::HasAttributes
     Class::MOP::Mixin::HasMethods
+    Class::MOP::Mixin::HasOverloads
 /;
 
 1;
@@ -744,7 +795,7 @@ Class::MOP - A Meta Object Protocol for Perl 5
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -4,6 +4,8 @@ package # hide from PAUSE
 use strict;
 use warnings;
 
+# this module was generated with Dist::Zilla::Plugin::Conflicts 0.16
+
 use Dist::CheckConflicts
     -dist      => 'Moose',
     -conflicts => {
@@ -34,7 +36,6 @@ use Dist::CheckConflicts
         'MooseX::Declare' => '0.35',
         'MooseX::FollowPBP' => '0.02',
         'MooseX::Getopt' => '0.56',
-        'MooseX::HasDefaults' => '0.02',
         'MooseX::InstanceTracking' => '0.04',
         'MooseX::LazyRequire' => '0.06',
         'MooseX::Meta::Attribute::Index' => '0.04',
@@ -48,7 +49,7 @@ use Dist::CheckConflicts
         'MooseX::PrivateSetters' => '0.03',
         'MooseX::Role::Cmd' => '0.06',
         'MooseX::Role::Parameterized' => '1.00',
-        'MooseX::Role::WithOverloading' => '0.07',
+        'MooseX::Role::WithOverloading' => '0.14',
         'MooseX::Runnable' => '0.03',
         'MooseX::Scaffold' => '0.05',
         'MooseX::SemiAffordanceAccessor' => '0.05',
@@ -71,80 +72,41 @@ use Dist::CheckConflicts
         'Test::CleanNamespaces' => '0.03',
         'Test::Moose::More' => '0.022',
         'Test::TempDir' => '0.05',
+        'Throwable' => '0.102080',
         'namespace::autoclean' => '0.08',
     },
+    -also => [ qw(
+        Carp
+        Class::Load
+        Class::Load::XS
+        Data::OptList
+        Devel::GlobalDestruction
+        Devel::OverloadInfo
+        Devel::StackTrace
+        Dist::CheckConflicts
+        Eval::Closure
+        List::MoreUtils
+        List::Util
+        MRO::Compat
+        Module::Runtime
+        Module::Runtime::Conflicts
+        Package::DeprecationManager
+        Package::Stash
+        Package::Stash::XS
+        Params::Util
+        Scalar::Util
+        Sub::Exporter
+        Sub::Name
+        Task::Weaken
+        Try::Tiny
+        parent
+        strict
+        warnings
+    ) ],
 
 ;
 
 1;
 
 # ABSTRACT: Provide information on conflicts for Moose
-
-__END__
-
-=pod
-
-=encoding UTF-8
-
-=head1 NAME
-
-Moose::Conflicts - Provide information on conflicts for Moose
-
-=head1 VERSION
-
-version 2.1204
-
-=head1 AUTHORS
-
-=over 4
-
-=item *
-
-Stevan Little <stevan.little@iinteractive.com>
-
-=item *
-
-Dave Rolsky <autarch@urth.org>
-
-=item *
-
-Jesse Luehrs <doy@tozt.net>
-
-=item *
-
-Shawn M Moore <code@sartak.org>
-
-=item *
-
-יובל קוג'מן (Yuval Kogman) <nothingmuch@woobling.org>
-
-=item *
-
-Karen Etheridge <ether@cpan.org>
-
-=item *
-
-Florian Ragwitz <rafl@debian.org>
-
-=item *
-
-Hans Dieter Pearcey <hdp@weftsoar.net>
-
-=item *
-
-Chris Prather <chris@prather.org>
-
-=item *
-
-Matt S Trout <mst@shadowcat.co.uk>
-
-=back
-
-=head1 COPYRIGHT AND LICENSE
-
-This software is copyright (c) 2006 by Infinity Interactive, Inc..
-
-This is free software; you can redistribute it and/or modify it under
-the same terms as the Perl 5 programming language system itself.
-
-=cut
+# Dist::Zilla: -PodWeaver
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Basics::BankAccount_MethodModifiersAndSubclassing;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Basics::BankAccount_MethodModifiersAndSubclassing
 # ABSTRACT: Demonstrates the use of method modifiers in a subclass
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Basics::BankAccount_MethodModifiersAndSubclassing - Demonstrate
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Basics::BinaryTree_AttributeFeatures;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Basics::BinaryTree_AttributeFeatures
 # ABSTRACT: Demonstrates various attribute features including lazy, predicates, weak refs, and more
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Basics::BinaryTree_AttributeFeatures - Demonstrates various att
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Basics::BinaryTree_BuilderAndLazyBuild;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Basics::BinaryTree_BuilderAndLazyBuild
 # ABSTRACT: Builder methods and lazy_build
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Basics::BinaryTree_BuilderAndLazyBuild - Builder methods and la
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Basics::Company_Subtypes;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Basics::Company_Subtypes
 # ABSTRACT: Demonstrates the use of subtypes and how to model classes related to companies, people, employees, etc.
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Basics::Company_Subtypes - Demonstrates the use of subtypes and
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Basics::DateTime_ExtendingNonMooseParent;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Basics::DateTime_ExtendingNonMooseParent
 # ABSTRACT: Extending a non-Moose parent class
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Basics::DateTime_ExtendingNonMooseParent - Extending a non-Moos
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Basics::Document_AugmentAndInner;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Basics::Document_AugmentAndInner
 # ABSTRACT: The augment modifier, which turns normal method overriding "inside-out"
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Basics::Document_AugmentAndInner - The augment modifier, which
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Basics::Genome_OverloadingSubtypesAndCoercion;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Basics::Genome_OverloadingSubtypesAndCoercion
 # ABSTRACT: Operator overloading, subtypes, and coercion
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Basics::Genome_OverloadingSubtypesAndCoercion - Operator overlo
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Basics::HTTP_SubtypesAndCoercion;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Basics::HTTP_SubtypesAndCoercion
 # ABSTRACT: Demonstrates subtypes and coercion use HTTP-related classes (Request, Protocol, etc.)
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Basics::HTTP_SubtypesAndCoercion - Demonstrates subtypes and co
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Basics::Immutable;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Basics::Immutable
 # ABSTRACT: Making Moose fast by making your class immutable
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Basics::Immutable - Making Moose fast by making your class immu
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Basics::Person_BUILDARGSAndBUILD;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Basics::Person_BUILDARGSAndBUILD
 # ABSTRACT: Using BUILDARGS and BUILD to hook into object construction
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Basics::Person_BUILDARGSAndBUILD - Using BUILDARGS and BUILD to
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Basics::Point_AttributesAndSubclassing;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Basics::Point_AttributesAndSubclassing
 # ABSTRACT: Point and Point3D classes, showing basic attributes and subclassing.
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Basics::Point_AttributesAndSubclassing - Point and Point3D clas
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Extending::Debugging_BaseClassRole;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Extending::Debugging_BaseClassRole
 # ABSTRACT: Providing a role for the base object class
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Extending::Debugging_BaseClassRole - Providing a role for the b
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -80,9 +77,7 @@ together rather than being overridden. Method modifiers require that a method
 exists in order to wrap, however, so we also provide a stub method to wrap if
 no C<BUILD> method exists in the class.
 
-=for testing-SETUP use Test::Requires {
-    'Test::Output' => '0',
-};
+=for testing-SETUP use Test::Requires 'Test::Output';
 
 =begin testing
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Extending::ExtensionOverview;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Extending::ExtensionOverview
 # ABSTRACT: Moose extension overview
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Extending::ExtensionOverview - Moose extension overview
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Extending::Mooseish_MooseSugar;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Extending::Mooseish_MooseSugar
 # ABSTRACT: Acting like Moose.pm and providing sugar Moose-style
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Extending::Mooseish_MooseSugar - Acting like Moose.pm and provi
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Legacy::Debugging_BaseClassReplacement;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Legacy::Debugging_BaseClassReplacement
 # ABSTRACT: Providing an alternate base object class
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Legacy::Debugging_BaseClassReplacement - Providing an alternate
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -71,9 +68,7 @@ us in the first place.
 
 See the L<Moose::Exporter> docs for more details on its API.
 
-=for testing-SETUP use Test::Requires {
-    'Test::Output' => '0',
-};
+=for testing-SETUP use Test::Requires 'Test::Output';
 
 =head1 USING MyApp::UseMyBase
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Meta::Labeled_AttributeMetaclass;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Legacy::Labeled_AttributeMetaclass
 # ABSTRACT: A meta-attribute, attributes with labels
 
 __END__
@@ -12,11 +9,11 @@ __END__
 
 =head1 NAME
 
-Moose::Cookbook::Meta::Labeled_AttributeMetaclass - A meta-attribute, attributes with labels
+Moose::Cookbook::Legacy::Labeled_AttributeMetaclass - A meta-attribute, attributes with labels
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Meta::Table_ClassMetaclass;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Legacy::Table_ClassMetaclass
 # ABSTRACT: Adding a "table" attribute to the metaclass
 
 __END__
@@ -12,11 +9,11 @@ __END__
 
 =head1 NAME
 
-Moose::Cookbook::Meta::Table_ClassMetaclass - Adding a "table" attribute to the metaclass
+Moose::Cookbook::Legacy::Table_ClassMetaclass - Adding a "table" attribute to the metaclass
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Meta::GlobRef_InstanceMetaclass;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Meta::GlobRef_InstanceMetaclass
 # ABSTRACT: Creating a glob reference meta-instance class
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Meta::GlobRef_InstanceMetaclass - Creating a glob reference met
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Meta::Labeled_AttributeTrait;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Meta::Labeled_AttributeTrait
 # ABSTRACT: Labels implemented via attribute traits
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Meta::Labeled_AttributeTrait - Labels implemented via attribute
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Meta::PrivateOrPublic_MethodMetaclass;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Meta::PrivateOrPublic_MethodMetaclass
 # ABSTRACT: A method metaclass for marking methods public or private
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Meta::PrivateOrPublic_MethodMetaclass - A method metaclass for
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Meta::Table_MetaclassTrait;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Meta::Table_MetaclassTrait
 # ABSTRACT: Adding a "table" attribute as a metaclass trait
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Meta::Table_MetaclassTrait - Adding a "table" attribute as a me
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Meta::WhyMeta;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Meta::WhyMeta
 # ABSTRACT: Welcome to the meta world (Why Go Meta?)
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Meta::WhyMeta - Welcome to the meta world (Why Go Meta?)
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SUMMARY
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Roles::ApplicationToInstance;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Roles::ApplicationToInstance
 # ABSTRACT: Applying a role to an object instance
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Roles::ApplicationToInstance - Applying a role to an object ins
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Roles::Comparable_CodeReuse;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Roles::Comparable_CodeReuse
 # ABSTRACT: Using roles for code reuse
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Roles::Comparable_CodeReuse - Using roles for code reuse
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Roles::Restartable_AdvancedComposition;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Roles::Restartable_AdvancedComposition
 # ABSTRACT: Advanced Role Composition - method exclusion and aliasing
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Roles::Restartable_AdvancedComposition - Advanced Role Composit
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Snack::Keywords;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Snack::Keywords
 # ABSTRACT: Restricted "keywords" in Moose
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Snack::Keywords - Restricted "keywords" in Moose
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -69,6 +66,8 @@ keywords:
 
 =item blessed
 
+=item meta
+
 =back
 
 =head2 Moose::Util::TypeConstraints Keywords
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Snack::Types;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Snack::Types
 # ABSTRACT: Snippets of code for using Types and Type Constraints
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Snack::Types - Snippets of code for using Types and Type Constr
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook::Style;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook::Style
 # ABSTRACT: Expanded into Moose::Manual::BestPractices, so go read that
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook::Style - Expanded into Moose::Manual::BestPractices, so go read
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,7 +1,4 @@
-package Moose::Cookbook;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Cookbook
 # ABSTRACT: How to cook a Moose
 
 __END__
@@ -16,7 +13,7 @@ Moose::Cookbook - How to cook a Moose
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,8 +1,5 @@
 package Moose::Deprecated;
-BEGIN {
-  $Moose::Deprecated::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Deprecated::VERSION = '2.1204';
+$Moose::Deprecated::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -29,7 +26,7 @@ Moose::Deprecated - Manages deprecation warnings for Moose
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,8 +1,5 @@
 package Moose::Exception::AccessorMustReadWrite;
-BEGIN {
-  $Moose::Exception::AccessorMustReadWrite::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::AccessorMustReadWrite::VERSION = '2.1204';
+$Moose::Exception::AccessorMustReadWrite::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::InvalidAttributeOptions';
@@ -1,8 +1,5 @@
 package Moose::Exception::AddParameterizableTypeTakesParameterizableType;
-BEGIN {
-  $Moose::Exception::AddParameterizableTypeTakesParameterizableType::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::AddParameterizableTypeTakesParameterizableType::VERSION = '2.1204';
+$Moose::Exception::AddParameterizableTypeTakesParameterizableType::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::AddRoleTakesAMooseMetaRoleInstance;
-BEGIN {
-  $Moose::Exception::AddRoleTakesAMooseMetaRoleInstance::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::AddRoleTakesAMooseMetaRoleInstance::VERSION = '2.1204';
+$Moose::Exception::AddRoleTakesAMooseMetaRoleInstance::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::AddRoleToARoleTakesAMooseMetaRole;
-BEGIN {
-  $Moose::Exception::AddRoleToARoleTakesAMooseMetaRole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::AddRoleToARoleTakesAMooseMetaRole::VERSION = '2.1204';
+$Moose::Exception::AddRoleToARoleTakesAMooseMetaRole::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
@@ -1,8 +1,5 @@
 package Moose::Exception::ApplyTakesABlessedInstance;
-BEGIN {
-  $Moose::Exception::ApplyTakesABlessedInstance::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::ApplyTakesABlessedInstance::VERSION = '2.1204';
+$Moose::Exception::ApplyTakesABlessedInstance::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
@@ -1,8 +1,5 @@
 package Moose::Exception::AttachToClassNeedsAClassMOPClassInstanceOrASubclass;
-BEGIN {
-  $Moose::Exception::AttachToClassNeedsAClassMOPClassInstanceOrASubclass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::AttachToClassNeedsAClassMOPClassInstanceOrASubclass::VERSION = '2.1204';
+$Moose::Exception::AttachToClassNeedsAClassMOPClassInstanceOrASubclass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute';
@@ -1,15 +1,12 @@
 package Moose::Exception::AttributeConflictInRoles;
-BEGIN {
-  $Moose::Exception::AttributeConflictInRoles::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::AttributeConflictInRoles::VERSION = '2.1204';
+$Moose::Exception::AttributeConflictInRoles::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
 
-has 'second_role' => (
+has 'second_role_name' => (
     is       => 'ro',
-    isa      => 'Moose::Meta::Role',
+    isa      => 'Str',
     required => 1
 );
 
@@ -20,12 +17,14 @@ has 'attribute_name' => (
 );
 
 sub _build_message {
-    my $self = shift;
-    "Role '". $self->role->name
-    . "' has encountered an attribute conflict"
-    . " while being composed into '".$self->second_role->name."'."
+    my $self             = shift;
+    my $role_name        = $self->role_name;
+    my $second_role_name = $self->second_role_name;
+    my $attribute_name   = $self->attribute_name;
+    "Role '$role_name' has encountered an attribute conflict"
+    . " while being composed into '$second_role_name'."
     . " This is a fatal error and cannot be disambiguated."
-    . " The conflicting attribute is named '".$self->attribute_name."'.";
+    . " The conflicting attribute is named '$attribute_name'.";
 }
 
 1;
@@ -1,23 +1,20 @@
 package Moose::Exception::AttributeConflictInSummation;
-BEGIN {
-  $Moose::Exception::AttributeConflictInSummation::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::AttributeConflictInSummation::VERSION = '2.1204';
+$Moose::Exception::AttributeConflictInSummation::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role', 'Moose::Exception::Role::AttributeName';
 
-has 'second_role' => (
+has 'second_role_name' => (
     is         => 'ro',
-    isa        => 'Moose::Meta::Role',
+    isa        => 'Str',
     required   => 1,
 );
 
 sub _build_message {
     my $self = shift;
 
-    my $role1 = $self->role_name;
-    my $role2 = $self->second_role->name;
+    my $role1     = $self->role_name;
+    my $role2     = $self->second_role_name;
     my $attr_name = $self->attribute_name;
 
     return "We have encountered an attribute conflict with '$attr_name'"
@@ -1,8 +1,5 @@
 package Moose::Exception::AttributeExtensionIsNotSupportedInRoles;
-BEGIN {
-  $Moose::Exception::AttributeExtensionIsNotSupportedInRoles::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::AttributeExtensionIsNotSupportedInRoles::VERSION = '2.1204';
+$Moose::Exception::AttributeExtensionIsNotSupportedInRoles::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
@@ -1,25 +1,16 @@
 package Moose::Exception::AttributeIsRequired;
-BEGIN {
-  $Moose::Exception::AttributeIsRequired::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::AttributeIsRequired::VERSION = '2.1204';
+$Moose::Exception::AttributeIsRequired::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
 
-use Moose::Util 'throw_exception';
-
 has 'attribute_name' => (
-    is         => 'ro',
-    isa        => 'Str',
-    lazy_build => 1
-);
-
-has 'attribute' => (
-    is        => 'ro',
-    isa       => 'Class::MOP::Attribute',
-    # predicate => 'has_attribute',
-    lazy_build => 1
+    is            => 'ro',
+    isa           => 'Str',
+    required      => 1,
+    documentation => "This attribute can be used for fetching attribute instance:\n".
+                     "    my \$class = Moose::Util::find_meta( \$exception->class_name );\n".
+                     "    my \$attribute = \$class->get_attribute( \$exception->attribute_name );\n",
 );
 
 has 'params' => (
@@ -28,74 +19,6 @@ has 'params' => (
     predicate => 'has_params',
 );
 
-sub _build_attribute {
-    my $self = shift;
-    if( $self->has_attribute_name &&
-        $self->is_class_name_set ) {
-        $self->class->get_attribute( $self->attribute_name );
-    }
-}
-
-sub _build_class {
-    my $self = shift;
-    if( $self->has_attribute ) {
-        return $self->attribute->associated_class;
-    } elsif( $self->is_class_name_set ) {
-        return Class::MOP::class_of( $self->class_name );
-    }
-};
-
-sub _build_class_name {
-    my $self = shift;
-    return $self->class->name;
-}
-
-sub _has_class_or_class_name {
-    my $self = shift;
-
-    if( $self->has_attribute ) {
-        return 1;
-    } else {
-        return $self->is_class_name_set ||
-               $self->is_class_set;
-    }
-}
-
-sub _build_attribute_name {
-    my $self = shift;
-    if( $self->has_attribute ) {
-        return $self->attribute->name;
-    } else {
-        throw_exception( "NeitherAttributeNorAttributeNameIsGiven" );
-    }
-}
-
-after "BUILD" => sub {
-    my $self = $_[0];
-
-    if( $self->has_attribute_name &&
-        $self->has_attribute &&
-        ( $self->attribute->name ne $self->attribute_name ) )
-    {
-        throw_exception( AttributeNamesDoNotMatch => attribute_name => $self->attribute_name,
-                                                     attribute      => $self->attribute
-                       );
-    } elsif( !$self->has_attribute &&
-             !$self->is_class_name_set &&
-             !$self->is_class_set ) {
-        throw_exception( "NeitherClassNorClassNameIsGiven" );
-    } elsif( !$self->has_attribute &&
-             !$self->has_attribute_name ) {
-        throw_exception( "NeitherAttributeNorAttributeNameIsGiven" );
-    } elsif( $self->is_class_name_set &&
-             $self->has_attribute &&
-             ( $self->class_name ne $self->class->name ) ) {
-        throw_exception( ClassNamesDoNotMatch => class_name => $self->class_name,
-                                                 class      => $self->class,
-                       );
-    }
-};
-
 sub _build_message {
     my $self = shift;
     "Attribute (".$self->attribute_name.") is required";
@@ -1,8 +1,5 @@
 package Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass;
-BEGIN {
-  $Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass::VERSION = '2.1204';
+$Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::AttributeNamesDoNotMatch;
-BEGIN {
-  $Moose::Exception::AttributeNamesDoNotMatch::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::AttributeNamesDoNotMatch::VERSION = '2.1204';
+$Moose::Exception::AttributeNamesDoNotMatch::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::AttributeValueIsNotAnObject;
-BEGIN {
-  $Moose::Exception::AttributeValueIsNotAnObject::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::AttributeValueIsNotAnObject::VERSION = '2.1204';
+$Moose::Exception::AttributeValueIsNotAnObject::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Instance', 'Moose::Exception::Role::Attribute';
@@ -1,8 +1,5 @@
 package Moose::Exception::AttributeValueIsNotDefined;
-BEGIN {
-  $Moose::Exception::AttributeValueIsNotDefined::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::AttributeValueIsNotDefined::VERSION = '2.1204';
+$Moose::Exception::AttributeValueIsNotDefined::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Instance', 'Moose::Exception::Role::Attribute';
@@ -1,8 +1,5 @@
 package Moose::Exception::AutoDeRefNeedsArrayRefOrHashRef;
-BEGIN {
-  $Moose::Exception::AutoDeRefNeedsArrayRefOrHashRef::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::AutoDeRefNeedsArrayRefOrHashRef::VERSION = '2.1204';
+$Moose::Exception::AutoDeRefNeedsArrayRefOrHashRef::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::InvalidAttributeOptions';
@@ -1,8 +1,5 @@
 package Moose::Exception::BadOptionFormat;
-BEGIN {
-  $Moose::Exception::BadOptionFormat::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::BadOptionFormat::VERSION = '2.1204';
+$Moose::Exception::BadOptionFormat::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute';
@@ -1,8 +1,5 @@
 package Moose::Exception::BothBuilderAndDefaultAreNotAllowed;
-BEGIN {
-  $Moose::Exception::BothBuilderAndDefaultAreNotAllowed::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::BothBuilderAndDefaultAreNotAllowed::VERSION = '2.1204';
+$Moose::Exception::BothBuilderAndDefaultAreNotAllowed::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::BuilderDoesNotExist;
-BEGIN {
-  $Moose::Exception::BuilderDoesNotExist::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::BuilderDoesNotExist::VERSION = '2.1204';
+$Moose::Exception::BuilderDoesNotExist::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute', 'Moose::Exception::Role::Instance';
@@ -1,8 +1,5 @@
 package Moose::Exception::BuilderMethodNotSupportedForAttribute;
-BEGIN {
-  $Moose::Exception::BuilderMethodNotSupportedForAttribute::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::BuilderMethodNotSupportedForAttribute::VERSION = '2.1204';
+$Moose::Exception::BuilderMethodNotSupportedForAttribute::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute', 'Moose::Exception::Role::Instance';
@@ -1,8 +1,5 @@
 package Moose::Exception::BuilderMethodNotSupportedForInlineAttribute;
-BEGIN {
-  $Moose::Exception::BuilderMethodNotSupportedForInlineAttribute::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::BuilderMethodNotSupportedForInlineAttribute::VERSION = '2.1204';
+$Moose::Exception::BuilderMethodNotSupportedForInlineAttribute::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Instance', 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::BuilderMustBeAMethodName;
-BEGIN {
-  $Moose::Exception::BuilderMustBeAMethodName::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::BuilderMustBeAMethodName::VERSION = '2.1204';
+$Moose::Exception::BuilderMustBeAMethodName::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::CallingMethodOnAnImmutableInstance;
-BEGIN {
-  $Moose::Exception::CallingMethodOnAnImmutableInstance::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CallingMethodOnAnImmutableInstance::VERSION = '2.1204';
+$Moose::Exception::CallingMethodOnAnImmutableInstance::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::CallingReadOnlyMethodOnAnImmutableInstance;
-BEGIN {
-  $Moose::Exception::CallingReadOnlyMethodOnAnImmutableInstance::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CallingReadOnlyMethodOnAnImmutableInstance::VERSION = '2.1204';
+$Moose::Exception::CallingReadOnlyMethodOnAnImmutableInstance::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,20 +1,13 @@
 package Moose::Exception::CanExtendOnlyClasses;
-BEGIN {
-  $Moose::Exception::CanExtendOnlyClasses::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CanExtendOnlyClasses::VERSION = '2.1204';
+$Moose::Exception::CanExtendOnlyClasses::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
-
-has 'role' => (
-    is       => 'ro',
-    isa      => 'Moose::Meta::Role',
-    required => 1,
-);
+with 'Moose::Exception::Role::Role';
 
 sub _build_message {
-    my $self = shift;
-    "You cannot inherit from a Moose Role (".$self->role->name.")";
+    my $self      = shift;
+    my $role_name = $self->role_name;
+    return "You cannot inherit from a Moose Role ($role_name)";
 }
 
 1;
@@ -1,8 +1,5 @@
 package Moose::Exception::CanOnlyConsumeRole;
-BEGIN {
-  $Moose::Exception::CanOnlyConsumeRole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CanOnlyConsumeRole::VERSION = '2.1204';
+$Moose::Exception::CanOnlyConsumeRole::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::CanOnlyWrapBlessedCode;
-BEGIN {
-  $Moose::Exception::CanOnlyWrapBlessedCode::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CanOnlyWrapBlessedCode::VERSION = '2.1204';
+$Moose::Exception::CanOnlyWrapBlessedCode::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,15 +1,13 @@
 package Moose::Exception::CanReblessOnlyIntoASubclass;
-BEGIN {
-  $Moose::Exception::CanReblessOnlyIntoASubclass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CanReblessOnlyIntoASubclass::VERSION = '2.1204';
+$Moose::Exception::CanReblessOnlyIntoASubclass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
-with 'Moose::Exception::Role::ParamsHash', 'Moose::Exception::Role::Class', 'Moose::Exception::Role::Instance';
+with 'Moose::Exception::Role::ParamsHash', 'Moose::Exception::Role::Class', 'Moose::Exception::Role::Instance', 'Moose::Exception::Role::InstanceClass';
 
 sub _build_message {
-    my $self = shift;
-    "You may rebless only into a subclass of (".blessed( $self->instance )."), of which (". $self->class->name .") isn't."
+    my $self           = shift;
+    my $instance_class = $self->instance_class;
+    "You may rebless only into a subclass of ($instance_class), of which (". $self->class_name .") isn't."
 }
 
 1;
@@ -1,15 +1,12 @@
 package Moose::Exception::CanReblessOnlyIntoASuperclass;
-BEGIN {
-  $Moose::Exception::CanReblessOnlyIntoASuperclass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CanReblessOnlyIntoASuperclass::VERSION = '2.1204';
+$Moose::Exception::CanReblessOnlyIntoASuperclass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
-with 'Moose::Exception::Role::Class', 'Moose::Exception::Role::Instance';
+with 'Moose::Exception::Role::Class', 'Moose::Exception::Role::Instance', 'Moose::Exception::Role::InstanceClass';
 
 sub _build_message {
     my $self = shift;
-    "You may rebless only into a superclass of (".blessed( $self->instance )."), of which (". $self->class->name .") isn't."
+    "You may rebless only into a superclass of (".blessed( $self->instance )."), of which (". $self->class_name .") isn't."
 }
 
 1;
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotAddAdditionalTypeCoercionsToUnion;
-BEGIN {
-  $Moose::Exception::CannotAddAdditionalTypeCoercionsToUnion::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotAddAdditionalTypeCoercionsToUnion::VERSION = '2.1204';
+$Moose::Exception::CannotAddAdditionalTypeCoercionsToUnion::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotAddAsAnAttributeToARole;
-BEGIN {
-  $Moose::Exception::CannotAddAsAnAttributeToARole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotAddAsAnAttributeToARole::VERSION = '2.1204';
+$Moose::Exception::CannotAddAsAnAttributeToARole::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotApplyBaseClassRolesToRole;
-BEGIN {
-  $Moose::Exception::CannotApplyBaseClassRolesToRole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotApplyBaseClassRolesToRole::VERSION = '2.1204';
+$Moose::Exception::CannotApplyBaseClassRolesToRole::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash', 'Moose::Exception::Role::Role';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotAssignValueToReadOnlyAccessor;
-BEGIN {
-  $Moose::Exception::CannotAssignValueToReadOnlyAccessor::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotAssignValueToReadOnlyAccessor::VERSION = '2.1204';
+$Moose::Exception::CannotAssignValueToReadOnlyAccessor::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class', 'Moose::Exception::Role::EitherAttributeOrAttributeName';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotAugmentIfLocalMethodPresent;
-BEGIN {
-  $Moose::Exception::CannotAugmentIfLocalMethodPresent::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotAugmentIfLocalMethodPresent::VERSION = '2.1204';
+$Moose::Exception::CannotAugmentIfLocalMethodPresent::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class', 'Moose::Exception::Role::Method';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotAugmentNoSuperMethod;
-BEGIN {
-  $Moose::Exception::CannotAugmentNoSuperMethod::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotAugmentNoSuperMethod::VERSION = '2.1204';
+$Moose::Exception::CannotAugmentNoSuperMethod::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotAutoDerefWithoutIsa;
-BEGIN {
-  $Moose::Exception::CannotAutoDerefWithoutIsa::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotAutoDerefWithoutIsa::VERSION = '2.1204';
+$Moose::Exception::CannotAutoDerefWithoutIsa::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::InvalidAttributeOptions';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotAutoDereferenceTypeConstraint;
-BEGIN {
-  $Moose::Exception::CannotAutoDereferenceTypeConstraint::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotAutoDereferenceTypeConstraint::VERSION = '2.1204';
+$Moose::Exception::CannotAutoDereferenceTypeConstraint::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute', 'Moose::Exception::Role::Instance', 'Moose::Exception::Role::TypeConstraint';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotCalculateNativeType;
-BEGIN {
-  $Moose::Exception::CannotCalculateNativeType::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotCalculateNativeType::VERSION = '2.1204';
+$Moose::Exception::CannotCalculateNativeType::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Instance';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotCallAnAbstractBaseMethod;
-BEGIN {
-  $Moose::Exception::CannotCallAnAbstractBaseMethod::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotCallAnAbstractBaseMethod::VERSION = '2.1204';
+$Moose::Exception::CannotCallAnAbstractBaseMethod::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotCallAnAbstractMethod;
-BEGIN {
-  $Moose::Exception::CannotCallAnAbstractMethod::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotCallAnAbstractMethod::VERSION = '2.1204';
+$Moose::Exception::CannotCallAnAbstractMethod::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotCoerceAWeakRef;
-BEGIN {
-  $Moose::Exception::CannotCoerceAWeakRef::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotCoerceAWeakRef::VERSION = '2.1204';
+$Moose::Exception::CannotCoerceAWeakRef::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::InvalidAttributeOptions';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotCoerceAttributeWhichHasNoCoercion;
-BEGIN {
-  $Moose::Exception::CannotCoerceAttributeWhichHasNoCoercion::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotCoerceAttributeWhichHasNoCoercion::VERSION = '2.1204';
+$Moose::Exception::CannotCoerceAttributeWhichHasNoCoercion::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::InvalidAttributeOptions', 'Moose::Exception::Role::TypeConstraint';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotCreateHigherOrderTypeWithoutATypeParameter;
-BEGIN {
-  $Moose::Exception::CannotCreateHigherOrderTypeWithoutATypeParameter::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotCreateHigherOrderTypeWithoutATypeParameter::VERSION = '2.1204';
+$Moose::Exception::CannotCreateHigherOrderTypeWithoutATypeParameter::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::TypeConstraint';
@@ -1,15 +1,12 @@
 package Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresent;
-BEGIN {
-  $Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresent::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresent::VERSION = '2.1204';
+$Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresent::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role', 'Moose::Exception::Role::Method';
 
-has 'role_being_applied' => (
+has 'role_being_applied_name' => (
     is       => 'ro',
-    isa      => 'Moose::Meta::Role',
+    isa      => 'Str',
     required => 1
 );
 
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresentInClass;
-BEGIN {
-  $Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresentInClass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresentInClass::VERSION = '2.1204';
+$Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresentInClass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role', 'Moose::Exception::Role::Method', 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotDelegateLocalMethodIsPresent;
-BEGIN {
-  $Moose::Exception::CannotDelegateLocalMethodIsPresent::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotDelegateLocalMethodIsPresent::VERSION = '2.1204';
+$Moose::Exception::CannotDelegateLocalMethodIsPresent::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute', 'Moose::Exception::Role::Method';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotDelegateWithoutIsa;
-BEGIN {
-  $Moose::Exception::CannotDelegateWithoutIsa::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotDelegateWithoutIsa::VERSION = '2.1204';
+$Moose::Exception::CannotDelegateWithoutIsa::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotFindDelegateMetaclass;
-BEGIN {
-  $Moose::Exception::CannotFindDelegateMetaclass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotFindDelegateMetaclass::VERSION = '2.1204';
+$Moose::Exception::CannotFindDelegateMetaclass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotFindType;
-BEGIN {
-  $Moose::Exception::CannotFindType::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotFindType::VERSION = '2.1204';
+$Moose::Exception::CannotFindType::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotFindTypeGivenToMatchOnType;
-BEGIN {
-  $Moose::Exception::CannotFindTypeGivenToMatchOnType::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotFindTypeGivenToMatchOnType::VERSION = '2.1204';
+$Moose::Exception::CannotFindTypeGivenToMatchOnType::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotFixMetaclassCompatibility;
-BEGIN {
-  $Moose::Exception::CannotFixMetaclassCompatibility::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotFixMetaclassCompatibility::VERSION = '2.1204';
+$Moose::Exception::CannotFixMetaclassCompatibility::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,16 +1,15 @@
 package Moose::Exception::CannotGenerateInlineConstraint;
-BEGIN {
-  $Moose::Exception::CannotGenerateInlineConstraint::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotGenerateInlineConstraint::VERSION = '2.1204';
+$Moose::Exception::CannotGenerateInlineConstraint::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::TypeConstraint';
 
-has 'parameterizable_type_object' => (
-    is       => 'ro',
-    isa      => 'Moose::Meta::TypeConstraint::Parameterizable',
-    required => 1
+has 'parameterizable_type_object_name' => (
+    is            => 'ro',
+    isa           => 'Str',
+    required      => 1,
+    documentation => "This attribute can be used for fetching parameterizable type constraint(Moose::Meta::TypeConstraint::Parameterizable):\n".
+                     "    my \$type_constraint =  Moose::Util::TypeConstraints::find_type_constraint( \$exception->type_name );\n",
 );
 
 has 'value' => (
@@ -21,7 +20,7 @@ has 'value' => (
 
 sub _build_message {
     my $self = shift;
-    my $type = $self->type;
+    my $type = $self->type_name;
 
     return "Can't generate an inline constraint for $type, since none was defined";
 }
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotInitializeMooseMetaRoleComposite;
-BEGIN {
-  $Moose::Exception::CannotInitializeMooseMetaRoleComposite::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotInitializeMooseMetaRoleComposite::VERSION = '2.1204';
+$Moose::Exception::CannotInitializeMooseMetaRoleComposite::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotInlineTypeConstraintCheck;
-BEGIN {
-  $Moose::Exception::CannotInlineTypeConstraintCheck::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotInlineTypeConstraintCheck::VERSION = '2.1204';
+$Moose::Exception::CannotInlineTypeConstraintCheck::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::TypeConstraint';
@@ -1,11 +1,8 @@
 package Moose::Exception::CannotLocatePackageInINC;
-BEGIN {
-  $Moose::Exception::CannotLocatePackageInINC::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotLocatePackageInINC::VERSION = '2.1204';
+$Moose::Exception::CannotLocatePackageInINC::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
-with 'Moose::Exception::Role::TypeConstraint', 'Moose::Exception::Role::ParamsHash';
+with 'Moose::Exception::Role::ParamsHash';
 
 has 'INC' => (
     is       => 'ro',
@@ -25,6 +22,12 @@ has 'metaclass_name' => (
     required => 1
 );
 
+has 'type' => (
+    is       => 'ro',
+    isa      => 'Str',
+    required => 1,
+);
+
 sub _build_message {
     my $self = shift;
     my $possible_packages = $self->possible_packages;
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotMakeMetaclassCompatible;
-BEGIN {
-  $Moose::Exception::CannotMakeMetaclassCompatible::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotMakeMetaclassCompatible::VERSION = '2.1204';
+$Moose::Exception::CannotMakeMetaclassCompatible::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotOverrideALocalMethod;
-BEGIN {
-  $Moose::Exception::CannotOverrideALocalMethod::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotOverrideALocalMethod::VERSION = '2.1204';
+$Moose::Exception::CannotOverrideALocalMethod::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotOverrideBodyOfMetaMethods;
-BEGIN {
-  $Moose::Exception::CannotOverrideBodyOfMetaMethods::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotOverrideBodyOfMetaMethods::VERSION = '2.1204';
+$Moose::Exception::CannotOverrideBodyOfMetaMethods::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotOverrideLocalMethodIsPresent;
-BEGIN {
-  $Moose::Exception::CannotOverrideLocalMethodIsPresent::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotOverrideLocalMethodIsPresent::VERSION = '2.1204';
+$Moose::Exception::CannotOverrideLocalMethodIsPresent::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class', 'Moose::Exception::Role::Method';
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotOverrideNoSuperMethod;
-BEGIN {
-  $Moose::Exception::CannotOverrideNoSuperMethod::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotOverrideNoSuperMethod::VERSION = '2.1204';
+$Moose::Exception::CannotOverrideNoSuperMethod::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,11 +1,7 @@
 package Moose::Exception::CannotRegisterUnnamedTypeConstraint;
-BEGIN {
-  $Moose::Exception::CannotRegisterUnnamedTypeConstraint::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotRegisterUnnamedTypeConstraint::VERSION = '2.1204';
+$Moose::Exception::CannotRegisterUnnamedTypeConstraint::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
-with 'Moose::Exception::Role::TypeConstraint';
 
 sub _build_message {
     "can't register an unnamed type constraint";
@@ -1,8 +1,5 @@
 package Moose::Exception::CannotUseLazyBuildAndDefaultSimultaneously;
-BEGIN {
-  $Moose::Exception::CannotUseLazyBuildAndDefaultSimultaneously::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CannotUseLazyBuildAndDefaultSimultaneously::VERSION = '2.1204';
+$Moose::Exception::CannotUseLazyBuildAndDefaultSimultaneously::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::InvalidAttributeOptions';
@@ -1,8 +1,5 @@
 package Moose::Exception::CircularReferenceInAlso;
-BEGIN {
-  $Moose::Exception::CircularReferenceInAlso::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CircularReferenceInAlso::VERSION = '2.1204';
+$Moose::Exception::CircularReferenceInAlso::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::ClassDoesNotHaveInitMeta;
-BEGIN {
-  $Moose::Exception::ClassDoesNotHaveInitMeta::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::ClassDoesNotHaveInitMeta::VERSION = '2.1204';
+$Moose::Exception::ClassDoesNotHaveInitMeta::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,21 +1,20 @@
 package Moose::Exception::ClassDoesTheExcludedRole;
-BEGIN {
-  $Moose::Exception::ClassDoesTheExcludedRole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::ClassDoesTheExcludedRole::VERSION = '2.1204';
+$Moose::Exception::ClassDoesTheExcludedRole::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role', 'Moose::Exception::Role::Class';
 
-has 'excluded_role' => (
+has 'excluded_role_name' => (
     is       => 'ro',
-    isa      => 'Moose::Meta::Role',
+    isa      => 'Str',
     required => 1
 );
 
 sub _build_message {
-    my $self = shift;
-    "The class " . $self->class_name . " does the excluded role '".$self->excluded_role->name."'";
+    my $self               = shift;
+    my $excluded_role_name = $self->excluded_role_name;
+    my $class_name         = $self->class_name;
+    return "The class $class_name does the excluded role '$excluded_role_name'";
 }
 
 1;
@@ -1,8 +1,5 @@
 package Moose::Exception::ClassNamesDoNotMatch;
-BEGIN {
-  $Moose::Exception::ClassNamesDoNotMatch::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::ClassNamesDoNotMatch::VERSION = '2.1204';
+$Moose::Exception::ClassNamesDoNotMatch::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::CloneObjectExpectsAnInstanceOfMetaclass;
-BEGIN {
-  $Moose::Exception::CloneObjectExpectsAnInstanceOfMetaclass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CloneObjectExpectsAnInstanceOfMetaclass::VERSION = '2.1204';
+$Moose::Exception::CloneObjectExpectsAnInstanceOfMetaclass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -15,7 +12,7 @@ has 'instance' => (
 
 sub _build_message {
     my $self = shift;
-    "You must pass an instance of the metaclass (" .$self->class->name. "), not (".$self->instance.")";
+    "You must pass an instance of the metaclass (" .$self->class_name. "), not (".$self->instance.")";
 }
 
 1;
@@ -1,8 +1,5 @@
 package Moose::Exception::CodeBlockMustBeACodeRef;
-BEGIN {
-  $Moose::Exception::CodeBlockMustBeACodeRef::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CodeBlockMustBeACodeRef::VERSION = '2.1204';
+$Moose::Exception::CodeBlockMustBeACodeRef::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash', 'Moose::Exception::Role::Instance';
@@ -1,16 +1,8 @@
 package Moose::Exception::CoercingWithoutCoercions;
-BEGIN {
-  $Moose::Exception::CoercingWithoutCoercions::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CoercingWithoutCoercions::VERSION = '2.1204';
+$Moose::Exception::CoercingWithoutCoercions::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
-
-has 'type' => (
-    is       => 'ro',
-    isa      => "Moose::Meta::TypeConstraint",
-    required => 1,
-);
+with 'Moose::Exception::Role::TypeConstraint';
 
 sub _build_message {
     my $self = shift;
@@ -1,8 +1,5 @@
 package Moose::Exception::CoercionAlreadyExists;
-BEGIN {
-  $Moose::Exception::CoercionAlreadyExists::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CoercionAlreadyExists::VERSION = '2.1204';
+$Moose::Exception::CoercionAlreadyExists::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Instance';
@@ -1,8 +1,5 @@
 package Moose::Exception::CoercionNeedsTypeConstraint;
-BEGIN {
-  $Moose::Exception::CoercionNeedsTypeConstraint::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CoercionNeedsTypeConstraint::VERSION = '2.1204';
+$Moose::Exception::CoercionNeedsTypeConstraint::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::InvalidAttributeOptions';
@@ -1,21 +1,20 @@
 package Moose::Exception::ConflictDetectedInCheckRoleExclusions;
-BEGIN {
-  $Moose::Exception::ConflictDetectedInCheckRoleExclusions::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::ConflictDetectedInCheckRoleExclusions::VERSION = '2.1204';
+$Moose::Exception::ConflictDetectedInCheckRoleExclusions::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
 
-has 'excluded_role' => (
+has 'excluded_role_name' => (
     is       => 'ro',
-    isa      => 'Moose::Meta::Role',
+    isa      => 'Str',
     required => 1
 );
 
 sub _build_message {
-    my $self = shift;
-    "Conflict detected: " . $self->role->name . " excludes role '" . $self->excluded_role->name . "'";
+    my $self               = shift;
+    my $role_name          = $self->role_name;
+    my $excluded_role_name = $self->excluded_role_name;
+    return "Conflict detected: $role_name excludes role '$excluded_role_name'";
 }
 
 1;
@@ -1,15 +1,14 @@
 package Moose::Exception::ConflictDetectedInCheckRoleExclusionsInToClass;
-BEGIN {
-  $Moose::Exception::ConflictDetectedInCheckRoleExclusionsInToClass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::ConflictDetectedInCheckRoleExclusionsInToClass::VERSION = '2.1204';
+$Moose::Exception::ConflictDetectedInCheckRoleExclusionsInToClass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class', 'Moose::Exception::Role::Role';
 
 sub _build_message {
-    my $self = shift;
-    "Conflict detected: " . $self->class->name . " excludes role '" . $self->role->name . "'";
+    my $self       = shift;
+    my $class_name = $self->class_name;
+    my $role_name  = $self->role_name;
+    return "Conflict detected: $class_name excludes role '$role_name'";
 }
 
 1;
@@ -1,8 +1,5 @@
 package Moose::Exception::ConstructClassInstanceTakesPackageName;
-BEGIN {
-  $Moose::Exception::ConstructClassInstanceTakesPackageName::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::ConstructClassInstanceTakesPackageName::VERSION = '2.1204';
+$Moose::Exception::ConstructClassInstanceTakesPackageName::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::CouldNotCreateMethod;
-BEGIN {
-  $Moose::Exception::CouldNotCreateMethod::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CouldNotCreateMethod::VERSION = '2.1204';
+$Moose::Exception::CouldNotCreateMethod::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute';
@@ -1,8 +1,5 @@
 package Moose::Exception::CouldNotCreateWriter;
-BEGIN {
-  $Moose::Exception::CouldNotCreateWriter::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CouldNotCreateWriter::VERSION = '2.1204';
+$Moose::Exception::CouldNotCreateWriter::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::EitherAttributeOrAttributeName', 'Moose::Exception::Role::Instance';
@@ -1,8 +1,5 @@
 package Moose::Exception::CouldNotEvalConstructor;
-BEGIN {
-  $Moose::Exception::CouldNotEvalConstructor::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CouldNotEvalConstructor::VERSION = '2.1204';
+$Moose::Exception::CouldNotEvalConstructor::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::CouldNotEvalDestructor;
-BEGIN {
-  $Moose::Exception::CouldNotEvalDestructor::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CouldNotEvalDestructor::VERSION = '2.1204';
+$Moose::Exception::CouldNotEvalDestructor::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::CouldNotFindTypeConstraintToCoerceFrom;
-BEGIN {
-  $Moose::Exception::CouldNotFindTypeConstraintToCoerceFrom::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CouldNotFindTypeConstraintToCoerceFrom::VERSION = '2.1204';
+$Moose::Exception::CouldNotFindTypeConstraintToCoerceFrom::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Instance';
@@ -1,8 +1,5 @@
 package Moose::Exception::CouldNotGenerateInlineAttributeMethod;
-BEGIN {
-  $Moose::Exception::CouldNotGenerateInlineAttributeMethod::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CouldNotGenerateInlineAttributeMethod::VERSION = '2.1204';
+$Moose::Exception::CouldNotGenerateInlineAttributeMethod::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Instance';
@@ -1,8 +1,5 @@
 package Moose::Exception::CouldNotLocateTypeConstraintForUnion;
-BEGIN {
-  $Moose::Exception::CouldNotLocateTypeConstraintForUnion::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CouldNotLocateTypeConstraintForUnion::VERSION = '2.1204';
+$Moose::Exception::CouldNotLocateTypeConstraintForUnion::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::TypeConstraint';
@@ -1,8 +1,5 @@
 package Moose::Exception::CouldNotParseType;
-BEGIN {
-  $Moose::Exception::CouldNotParseType::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CouldNotParseType::VERSION = '2.1204';
+$Moose::Exception::CouldNotParseType::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::CreateMOPClassTakesArrayRefOfAttributes;
-BEGIN {
-  $Moose::Exception::CreateMOPClassTakesArrayRefOfAttributes::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CreateMOPClassTakesArrayRefOfAttributes::VERSION = '2.1204';
+$Moose::Exception::CreateMOPClassTakesArrayRefOfAttributes::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::RoleForCreateMOPClass';
@@ -1,8 +1,5 @@
 package Moose::Exception::CreateMOPClassTakesArrayRefOfSuperclasses;
-BEGIN {
-  $Moose::Exception::CreateMOPClassTakesArrayRefOfSuperclasses::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CreateMOPClassTakesArrayRefOfSuperclasses::VERSION = '2.1204';
+$Moose::Exception::CreateMOPClassTakesArrayRefOfSuperclasses::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::RoleForCreateMOPClass';
@@ -1,8 +1,5 @@
 package Moose::Exception::CreateMOPClassTakesHashRefOfMethods;
-BEGIN {
-  $Moose::Exception::CreateMOPClassTakesHashRefOfMethods::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CreateMOPClassTakesHashRefOfMethods::VERSION = '2.1204';
+$Moose::Exception::CreateMOPClassTakesHashRefOfMethods::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::RoleForCreateMOPClass';
@@ -1,8 +1,5 @@
 package Moose::Exception::CreateTakesArrayRefOfRoles;
-BEGIN {
-  $Moose::Exception::CreateTakesArrayRefOfRoles::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CreateTakesArrayRefOfRoles::VERSION = '2.1204';
+$Moose::Exception::CreateTakesArrayRefOfRoles::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::RoleForCreate';
@@ -12,4 +9,3 @@ sub _build_message {
 }
 
 1;
-
@@ -1,8 +1,5 @@
 package Moose::Exception::CreateTakesHashRefOfAttributes;
-BEGIN {
-  $Moose::Exception::CreateTakesHashRefOfAttributes::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CreateTakesHashRefOfAttributes::VERSION = '2.1204';
+$Moose::Exception::CreateTakesHashRefOfAttributes::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::RoleForCreate';
@@ -1,8 +1,5 @@
 package Moose::Exception::CreateTakesHashRefOfMethods;
-BEGIN {
-  $Moose::Exception::CreateTakesHashRefOfMethods::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::CreateTakesHashRefOfMethods::VERSION = '2.1204';
+$Moose::Exception::CreateTakesHashRefOfMethods::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::RoleForCreate';
@@ -1,8 +1,5 @@
 package Moose::Exception::DefaultToMatchOnTypeMustBeCodeRef;
-BEGIN {
-  $Moose::Exception::DefaultToMatchOnTypeMustBeCodeRef::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::DefaultToMatchOnTypeMustBeCodeRef::VERSION = '2.1204';
+$Moose::Exception::DefaultToMatchOnTypeMustBeCodeRef::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::DelegationToAClassWhichIsNotLoaded;
-BEGIN {
-  $Moose::Exception::DelegationToAClassWhichIsNotLoaded::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::DelegationToAClassWhichIsNotLoaded::VERSION = '2.1204';
+$Moose::Exception::DelegationToAClassWhichIsNotLoaded::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute';
@@ -1,8 +1,5 @@
 package Moose::Exception::DelegationToARoleWhichIsNotLoaded;
-BEGIN {
-  $Moose::Exception::DelegationToARoleWhichIsNotLoaded::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::DelegationToARoleWhichIsNotLoaded::VERSION = '2.1204';
+$Moose::Exception::DelegationToARoleWhichIsNotLoaded::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute';
@@ -1,8 +1,5 @@
 package Moose::Exception::DelegationToATypeWhichIsNotAClass;
-BEGIN {
-  $Moose::Exception::DelegationToATypeWhichIsNotAClass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::DelegationToATypeWhichIsNotAClass::VERSION = '2.1204';
+$Moose::Exception::DelegationToATypeWhichIsNotAClass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute';
@@ -1,16 +1,8 @@
 package Moose::Exception::DoesRequiresRoleName;
-BEGIN {
-  $Moose::Exception::DoesRequiresRoleName::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::DoesRequiresRoleName::VERSION = '2.1204';
+$Moose::Exception::DoesRequiresRoleName::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
-
-has 'class' => (
-    is       => 'ro',
-    isa      => 'Moose::Meta::Class',
-    required => 1,
-);
+with 'Moose::Exception::Role::Class';
 
 sub _build_message {
     "You must supply a role name to does()";
@@ -1,8 +1,5 @@
 package Moose::Exception::EnumCalledWithAnArrayRefAndAdditionalArgs;
-BEGIN {
-  $Moose::Exception::EnumCalledWithAnArrayRefAndAdditionalArgs::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::EnumCalledWithAnArrayRefAndAdditionalArgs::VERSION = '2.1204';
+$Moose::Exception::EnumCalledWithAnArrayRefAndAdditionalArgs::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::EnumValuesMustBeString;
-BEGIN {
-  $Moose::Exception::EnumValuesMustBeString::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::EnumValuesMustBeString::VERSION = '2.1204';
+$Moose::Exception::EnumValuesMustBeString::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::ExtendsMissingArgs;
-BEGIN {
-  $Moose::Exception::ExtendsMissingArgs::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::ExtendsMissingArgs::VERSION = '2.1204';
+$Moose::Exception::ExtendsMissingArgs::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::HandlesMustBeAHashRef;
-BEGIN {
-  $Moose::Exception::HandlesMustBeAHashRef::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::HandlesMustBeAHashRef::VERSION = '2.1204';
+$Moose::Exception::HandlesMustBeAHashRef::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Instance';
@@ -1,8 +1,5 @@
 package Moose::Exception::IllegalInheritedOptions;
-BEGIN {
-  $Moose::Exception::IllegalInheritedOptions::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::IllegalInheritedOptions::VERSION = '2.1204';
+$Moose::Exception::IllegalInheritedOptions::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::IllegalMethodTypeToAddMethodModifier;
-BEGIN {
-  $Moose::Exception::IllegalMethodTypeToAddMethodModifier::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::IllegalMethodTypeToAddMethodModifier::VERSION = '2.1204';
+$Moose::Exception::IllegalMethodTypeToAddMethodModifier::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,27 +1,23 @@
-
 package Moose::Exception::IncompatibleMetaclassOfSuperclass;
-BEGIN {
-  $Moose::Exception::IncompatibleMetaclassOfSuperclass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::IncompatibleMetaclassOfSuperclass::VERSION = '2.1204';
+$Moose::Exception::IncompatibleMetaclassOfSuperclass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
 
-has [qw/superclass_name superclass_meta_type/] => (
+has [qw/superclass_name superclass_meta_type class_meta_type/] => (
     is       => 'ro',
     isa      => 'Str',
-    required => 1
+    required => 1,
 );
 
 sub _build_message {
-    my $self = shift;
-    my $class_name = $self->class_name;
-    my $ref_class = ref($self->class);
+    my $self            = shift;
+    my $class_name      = $self->class_name;
+    my $class_meta_type = $self->class_meta_type;
     my $superclass_name = $self->superclass_name;
-    my $supermeta_type = $self->superclass_meta_type;
+    my $supermeta_type  = $self->superclass_meta_type;
 
-    return "The metaclass of $class_name ($ref_class)" .
+    return "The metaclass of $class_name ($class_meta_type)" .
            " is not compatible with the metaclass of its superclass, " .
            "$superclass_name ($supermeta_type)";
 }
@@ -1,8 +1,5 @@
 package Moose::Exception::InitMetaRequiresClass;
-BEGIN {
-  $Moose::Exception::InitMetaRequiresClass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InitMetaRequiresClass::VERSION = '2.1204';
+$Moose::Exception::InitMetaRequiresClass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::InitializeTakesUnBlessedPackageName;
-BEGIN {
-  $Moose::Exception::InitializeTakesUnBlessedPackageName::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InitializeTakesUnBlessedPackageName::VERSION = '2.1204';
+$Moose::Exception::InitializeTakesUnBlessedPackageName::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,15 +1,12 @@
 package Moose::Exception::InstanceBlessedIntoWrongClass;
-BEGIN {
-  $Moose::Exception::InstanceBlessedIntoWrongClass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InstanceBlessedIntoWrongClass::VERSION = '2.1204';
+$Moose::Exception::InstanceBlessedIntoWrongClass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash', 'Moose::Exception::Role::Class', 'Moose::Exception::Role::Instance';
 
 sub _build_message {
     my $self = shift;
-    "Objects passed as the __INSTANCE__ parameter must already be blessed into the correct class, but ".$self->instance." is not a " . $self->class->name;
+    "Objects passed as the __INSTANCE__ parameter must already be blessed into the correct class, but ".$self->instance." is not a " . $self->class_name;
 }
 
 1;
@@ -1,8 +1,5 @@
 package Moose::Exception::InstanceMustBeABlessedReference;
-BEGIN {
-  $Moose::Exception::InstanceMustBeABlessedReference::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InstanceMustBeABlessedReference::VERSION = '2.1204';
+$Moose::Exception::InstanceMustBeABlessedReference::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash', 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::InvalidArgPassedToMooseUtilMetaRole;
-BEGIN {
-  $Moose::Exception::InvalidArgPassedToMooseUtilMetaRole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InvalidArgPassedToMooseUtilMetaRole::VERSION = '2.1204';
+$Moose::Exception::InvalidArgPassedToMooseUtilMetaRole::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::InvalidArgumentToMethod;
-BEGIN {
-  $Moose::Exception::InvalidArgumentToMethod::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InvalidArgumentToMethod::VERSION = '2.1204';
+$Moose::Exception::InvalidArgumentToMethod::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::InvalidArgumentsToTraitAliases;
-BEGIN {
-  $Moose::Exception::InvalidArgumentsToTraitAliases::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InvalidArgumentsToTraitAliases::VERSION = '2.1204';
+$Moose::Exception::InvalidArgumentsToTraitAliases::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::InvalidBaseTypeGivenToCreateParameterizedTypeConstraint;
-BEGIN {
-  $Moose::Exception::InvalidBaseTypeGivenToCreateParameterizedTypeConstraint::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InvalidBaseTypeGivenToCreateParameterizedTypeConstraint::VERSION = '2.1204';
+$Moose::Exception::InvalidBaseTypeGivenToCreateParameterizedTypeConstraint::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::TypeConstraint';
@@ -1,8 +1,5 @@
 package Moose::Exception::InvalidHandleValue;
-BEGIN {
-  $Moose::Exception::InvalidHandleValue::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InvalidHandleValue::VERSION = '2.1204';
+$Moose::Exception::InvalidHandleValue::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Instance';
@@ -1,8 +1,5 @@
 package Moose::Exception::InvalidHasProvidedInARole;
-BEGIN {
-  $Moose::Exception::InvalidHasProvidedInARole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InvalidHasProvidedInARole::VERSION = '2.1204';
+$Moose::Exception::InvalidHasProvidedInARole::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
@@ -1,8 +1,5 @@
 package Moose::Exception::InvalidNameForType;
-BEGIN {
-  $Moose::Exception::InvalidNameForType::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InvalidNameForType::VERSION = '2.1204';
+$Moose::Exception::InvalidNameForType::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -0,0 +1,19 @@
+package Moose::Exception::InvalidOverloadOperator;
+$Moose::Exception::InvalidOverloadOperator::VERSION = '2.1402';
+use Moose;
+extends 'Moose::Exception';
+
+has operator => (
+    is       => 'ro',
+    isa      => 'Defined',
+    required => 1,
+);
+
+sub _build_message {
+    my $self = shift;
+    'The operator parameter you passed to the Moose::Meta::Overload constructor ('
+        . $self->operator()
+        . ') was not a valid overloading operator';
+}
+
+1;
@@ -1,8 +1,5 @@
 package Moose::Exception::InvalidRoleApplication;
-BEGIN {
-  $Moose::Exception::InvalidRoleApplication::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InvalidRoleApplication::VERSION = '2.1204';
+$Moose::Exception::InvalidRoleApplication::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::InvalidTypeConstraint;
-BEGIN {
-  $Moose::Exception::InvalidTypeConstraint::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InvalidTypeConstraint::VERSION = '2.1204';
+$Moose::Exception::InvalidTypeConstraint::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::InvalidTypeGivenToCreateParameterizedTypeConstraint;
-BEGIN {
-  $Moose::Exception::InvalidTypeGivenToCreateParameterizedTypeConstraint::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InvalidTypeGivenToCreateParameterizedTypeConstraint::VERSION = '2.1204';
+$Moose::Exception::InvalidTypeGivenToCreateParameterizedTypeConstraint::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::TypeConstraint';
@@ -1,8 +1,5 @@
 package Moose::Exception::InvalidValueForIs;
-BEGIN {
-  $Moose::Exception::InvalidValueForIs::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::InvalidValueForIs::VERSION = '2.1204';
+$Moose::Exception::InvalidValueForIs::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::InvalidAttributeOptions';
@@ -1,8 +1,5 @@
 package Moose::Exception::IsaDoesNotDoTheRole;
-BEGIN {
-  $Moose::Exception::IsaDoesNotDoTheRole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::IsaDoesNotDoTheRole::VERSION = '2.1204';
+$Moose::Exception::IsaDoesNotDoTheRole::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::InvalidAttributeOptions';
@@ -1,8 +1,5 @@
 package Moose::Exception::IsaLacksDoesMethod;
-BEGIN {
-  $Moose::Exception::IsaLacksDoesMethod::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::IsaLacksDoesMethod::VERSION = '2.1204';
+$Moose::Exception::IsaLacksDoesMethod::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::InvalidAttributeOptions';
@@ -1,8 +1,5 @@
 package Moose::Exception::LazyAttributeNeedsADefault;
-BEGIN {
-  $Moose::Exception::LazyAttributeNeedsADefault::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::LazyAttributeNeedsADefault::VERSION = '2.1204';
+$Moose::Exception::LazyAttributeNeedsADefault::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::EitherAttributeOrAttributeName';
@@ -1,8 +1,5 @@
 package Moose::Exception::Legacy;
-BEGIN {
-  $Moose::Exception::Legacy::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::Legacy::VERSION = '2.1204';
+$Moose::Exception::Legacy::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::MOPAttributeNewNeedsAttributeName;
-BEGIN {
-  $Moose::Exception::MOPAttributeNewNeedsAttributeName::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MOPAttributeNewNeedsAttributeName::VERSION = '2.1204';
+$Moose::Exception::MOPAttributeNewNeedsAttributeName::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,15 +1,13 @@
 package Moose::Exception::MatchActionMustBeACodeRef;
-BEGIN {
-  $Moose::Exception::MatchActionMustBeACodeRef::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MatchActionMustBeACodeRef::VERSION = '2.1204';
+$Moose::Exception::MatchActionMustBeACodeRef::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
+with 'Moose::Exception::Role::TypeConstraint';
 
 has 'to_match' => (
     is       => 'ro',
     isa      => 'Any',
-    required => 1
+    required => 1,
 );
 
 has 'action' => (
@@ -18,12 +16,6 @@ has 'action' => (
     required => 1
 );
 
-has 'type' => (
-    is       => 'ro',
-    isa      => 'Moose::Meta::TypeConstraint',
-    required => 1
-);
-
 sub _build_message {
     my $self = shift;
     my $action = $self->action;
@@ -1,8 +1,5 @@
 package Moose::Exception::MessageParameterMustBeCodeRef;
-BEGIN {
-  $Moose::Exception::MessageParameterMustBeCodeRef::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MessageParameterMustBeCodeRef::VERSION = '2.1204';
+$Moose::Exception::MessageParameterMustBeCodeRef::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,12 +1,11 @@
 package Moose::Exception::MetaclassIsAClassNotASubclassOfGivenMetaclass;
-BEGIN {
-  $Moose::Exception::MetaclassIsAClassNotASubclassOfGivenMetaclass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MetaclassIsAClassNotASubclassOfGivenMetaclass::VERSION = '2.1204';
+$Moose::Exception::MetaclassIsAClassNotASubclassOfGivenMetaclass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
 
+use Moose::Util 'find_meta';
+
 has 'metaclass' => (
     is       => 'ro',
     isa      => 'Str',
@@ -15,8 +14,9 @@ has 'metaclass' => (
 
 sub _build_message {
     my $self = shift;
-    $self->class_name." already has a metaclass, but it does not inherit ".$self->metaclass.' ('.$self->class.
-        '). You cannot make the same thing a role and a class. Remove either Moose or Moose::Role.';
+    my $class = find_meta( $self->class_name );
+    $self->class_name." already has a metaclass, but it does not inherit ".$self->metaclass.
+        " ($class). You cannot make the same thing a role and a class. Remove either Moose or Moose::Role.";
 }
 
 1;
@@ -1,12 +1,11 @@
 package Moose::Exception::MetaclassIsARoleNotASubclassOfGivenMetaclass;
-BEGIN {
-  $Moose::Exception::MetaclassIsARoleNotASubclassOfGivenMetaclass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MetaclassIsARoleNotASubclassOfGivenMetaclass::VERSION = '2.1204';
+$Moose::Exception::MetaclassIsARoleNotASubclassOfGivenMetaclass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
 
+use Moose::Util 'find_meta';
+
 has 'metaclass' => (
     is       => 'ro',
     isa      => 'Str',
@@ -15,8 +14,11 @@ has 'metaclass' => (
 
 sub _build_message {
     my $self = shift;
-    $self->role_name." already has a metaclass, but it does not inherit ".$self->metaclass.' ('.$self->role.
-        '). You cannot make the same thing a role and a class. Remove either Moose or Moose::Role.';
+    my $role_name = $self->role_name;
+    my $role      = find_meta( $role_name );
+    my $metaclass = $self->metaclass;
+    return "$role_name already has a metaclass, but it does not inherit $metaclass ($role). "
+        ."You cannot make the same thing a role and a class. Remove either Moose or Moose::Role.";
 }
 
 1;
@@ -1,12 +1,11 @@
 package Moose::Exception::MetaclassIsNotASubclassOfGivenMetaclass;
-BEGIN {
-  $Moose::Exception::MetaclassIsNotASubclassOfGivenMetaclass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MetaclassIsNotASubclassOfGivenMetaclass::VERSION = '2.1204';
+$Moose::Exception::MetaclassIsNotASubclassOfGivenMetaclass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
 
+use Moose::Util 'find_meta';
+
 has 'metaclass' => (
     is       => 'ro',
     isa      => 'Str',
@@ -15,7 +14,8 @@ has 'metaclass' => (
 
 sub _build_message {
     my $self = shift;
-    $self->class_name." already has a metaclass, but it does not inherit ".$self->metaclass.' ('.$self->class.').';
+    my $class = find_meta( $self->class_name );
+    $self->class_name." already has a metaclass, but it does not inherit ".$self->metaclass." ($class).";
 }
 
 1;
@@ -1,8 +1,5 @@
 package Moose::Exception::MetaclassMustBeASubclassOfMooseMetaClass;
-BEGIN {
-  $Moose::Exception::MetaclassMustBeASubclassOfMooseMetaClass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MetaclassMustBeASubclassOfMooseMetaClass::VERSION = '2.1204';
+$Moose::Exception::MetaclassMustBeASubclassOfMooseMetaClass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::MetaclassMustBeASubclassOfMooseMetaRole;
-BEGIN {
-  $Moose::Exception::MetaclassMustBeASubclassOfMooseMetaRole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MetaclassMustBeASubclassOfMooseMetaRole::VERSION = '2.1204';
+$Moose::Exception::MetaclassMustBeASubclassOfMooseMetaRole::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
@@ -1,8 +1,5 @@
 package Moose::Exception::MetaclassMustBeDerivedFromClassMOPClass;
-BEGIN {
-  $Moose::Exception::MetaclassMustBeDerivedFromClassMOPClass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MetaclassMustBeDerivedFromClassMOPClass::VERSION = '2.1204';
+$Moose::Exception::MetaclassMustBeDerivedFromClassMOPClass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::MetaclassNotLoaded;
-BEGIN {
-  $Moose::Exception::MetaclassNotLoaded::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MetaclassNotLoaded::VERSION = '2.1204';
+$Moose::Exception::MetaclassNotLoaded::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,12 +1,11 @@
 package Moose::Exception::MetaclassTypeIncompatible;
-BEGIN {
-  $Moose::Exception::MetaclassTypeIncompatible::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MetaclassTypeIncompatible::VERSION = '2.1204';
+$Moose::Exception::MetaclassTypeIncompatible::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
 
+use Moose::Util 'find_meta';
+
 has [qw(superclass_name metaclass_type)] => (
     is       => 'ro',
     isa      => 'Str',
@@ -23,7 +22,9 @@ sub _build_message {
     $metaclass_type_name =~ s/_(?:meta)?class$//;
     $metaclass_type_name =~ s/_/ /g;
 
-    my $self_metaclass_type = $self->class->$metaclass_type;
+    my $class = find_meta( $class_name );
+
+    my $self_metaclass_type = $class->$metaclass_type;
 
     my $super_meta = Class::MOP::get_metaclass_by_name($superclass_name);
     my $super_metatype = $super_meta->$metaclass_type;
@@ -1,8 +1,5 @@
 package Moose::Exception::MethodExpectedAMetaclassObject;
-BEGIN {
-  $Moose::Exception::MethodExpectedAMetaclassObject::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MethodExpectedAMetaclassObject::VERSION = '2.1204';
+$Moose::Exception::MethodExpectedAMetaclassObject::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::MethodExpectsFewerArgs;
-BEGIN {
-  $Moose::Exception::MethodExpectsFewerArgs::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MethodExpectsFewerArgs::VERSION = '2.1204';
+$Moose::Exception::MethodExpectsFewerArgs::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::MethodExpectsMoreArgs;
-BEGIN {
-  $Moose::Exception::MethodExpectsMoreArgs::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MethodExpectsMoreArgs::VERSION = '2.1204';
+$Moose::Exception::MethodExpectsMoreArgs::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::MethodModifierNeedsMethodName;
-BEGIN {
-  $Moose::Exception::MethodModifierNeedsMethodName::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MethodModifierNeedsMethodName::VERSION = '2.1204';
+$Moose::Exception::MethodModifierNeedsMethodName::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::MethodNameConflictInRoles;
-BEGIN {
-  $Moose::Exception::MethodNameConflictInRoles::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MethodNameConflictInRoles::VERSION = '2.1204';
+$Moose::Exception::MethodNameConflictInRoles::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::MethodNameNotFoundInInheritanceHierarchy;
-BEGIN {
-  $Moose::Exception::MethodNameNotFoundInInheritanceHierarchy::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MethodNameNotFoundInInheritanceHierarchy::VERSION = '2.1204';
+$Moose::Exception::MethodNameNotFoundInInheritanceHierarchy::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -15,7 +12,7 @@ has 'method_name' => (
 
 sub _build_message {
     my $self = shift;
-    "The method '".$self->method_name."' was not found in the inheritance hierarchy for ".$self->class->name;
+    "The method '".$self->method_name."' was not found in the inheritance hierarchy for ".$self->class_name;
 }
 
 1;
@@ -1,8 +1,5 @@
 package Moose::Exception::MethodNameNotGiven;
-BEGIN {
-  $Moose::Exception::MethodNameNotGiven::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MethodNameNotGiven::VERSION = '2.1204';
+$Moose::Exception::MethodNameNotGiven::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustDefineAMethodName;
-BEGIN {
-  $Moose::Exception::MustDefineAMethodName::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustDefineAMethodName::VERSION = '2.1204';
+$Moose::Exception::MustDefineAMethodName::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Instance';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustDefineAnAttributeName;
-BEGIN {
-  $Moose::Exception::MustDefineAnAttributeName::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustDefineAnAttributeName::VERSION = '2.1204';
+$Moose::Exception::MustDefineAnAttributeName::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -0,0 +1,11 @@
+package Moose::Exception::MustDefineAnOverloadOperator;
+$Moose::Exception::MustDefineAnOverloadOperator::VERSION = '2.1402';
+use Moose;
+extends 'Moose::Exception';
+with 'Moose::Exception::Role::Instance';
+
+sub _build_message {
+    "You must define an overload operator";
+}
+
+1;
@@ -1,8 +1,5 @@
 package Moose::Exception::MustHaveAtLeastOneValueToEnumerate;
-BEGIN {
-  $Moose::Exception::MustHaveAtLeastOneValueToEnumerate::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustHaveAtLeastOneValueToEnumerate::VERSION = '2.1204';
+$Moose::Exception::MustHaveAtLeastOneValueToEnumerate::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustPassAHashOfOptions;
-BEGIN {
-  $Moose::Exception::MustPassAHashOfOptions::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustPassAHashOfOptions::VERSION = '2.1204';
+$Moose::Exception::MustPassAHashOfOptions::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustPassAMooseMetaRoleInstanceOrSubclass;
-BEGIN {
-  $Moose::Exception::MustPassAMooseMetaRoleInstanceOrSubclass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustPassAMooseMetaRoleInstanceOrSubclass::VERSION = '2.1204';
+$Moose::Exception::MustPassAMooseMetaRoleInstanceOrSubclass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::MustPassAPackageNameOrAnExistingClassMOPPackageInstance;
-BEGIN {
-  $Moose::Exception::MustPassAPackageNameOrAnExistingClassMOPPackageInstance::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustPassAPackageNameOrAnExistingClassMOPPackageInstance::VERSION = '2.1204';
+$Moose::Exception::MustPassAPackageNameOrAnExistingClassMOPPackageInstance::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustPassEvenNumberOfArguments;
-BEGIN {
-  $Moose::Exception::MustPassEvenNumberOfArguments::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustPassEvenNumberOfArguments::VERSION = '2.1204';
+$Moose::Exception::MustPassEvenNumberOfArguments::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::MustPassEvenNumberOfAttributeOptions;
-BEGIN {
-  $Moose::Exception::MustPassEvenNumberOfAttributeOptions::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustPassEvenNumberOfAttributeOptions::VERSION = '2.1204';
+$Moose::Exception::MustPassEvenNumberOfAttributeOptions::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::MustProvideANameForTheAttribute;
-BEGIN {
-  $Moose::Exception::MustProvideANameForTheAttribute::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustProvideANameForTheAttribute::VERSION = '2.1204';
+$Moose::Exception::MustProvideANameForTheAttribute::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustSpecifyAtleastOneMethod;
-BEGIN {
-  $Moose::Exception::MustSpecifyAtleastOneMethod::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustSpecifyAtleastOneMethod::VERSION = '2.1204';
+$Moose::Exception::MustSpecifyAtleastOneMethod::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustSpecifyAtleastOneRole;
-BEGIN {
-  $Moose::Exception::MustSpecifyAtleastOneRole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustSpecifyAtleastOneRole::VERSION = '2.1204';
+$Moose::Exception::MustSpecifyAtleastOneRole::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustSpecifyAtleastOneRoleToApplicant;
-BEGIN {
-  $Moose::Exception::MustSpecifyAtleastOneRoleToApplicant::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustSpecifyAtleastOneRoleToApplicant::VERSION = '2.1204';
+$Moose::Exception::MustSpecifyAtleastOneRoleToApplicant::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::MustSupplyAClassMOPAttributeInstance;
-BEGIN {
-  $Moose::Exception::MustSupplyAClassMOPAttributeInstance::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustSupplyAClassMOPAttributeInstance::VERSION = '2.1204';
+$Moose::Exception::MustSupplyAClassMOPAttributeInstance::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustSupplyADelegateToMethod;
-BEGIN {
-  $Moose::Exception::MustSupplyADelegateToMethod::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustSupplyADelegateToMethod::VERSION = '2.1204';
+$Moose::Exception::MustSupplyADelegateToMethod::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustSupplyAMetaclass;
-BEGIN {
-  $Moose::Exception::MustSupplyAMetaclass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustSupplyAMetaclass::VERSION = '2.1204';
+$Moose::Exception::MustSupplyAMetaclass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustSupplyAMooseMetaAttributeInstance;
-BEGIN {
-  $Moose::Exception::MustSupplyAMooseMetaAttributeInstance::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustSupplyAMooseMetaAttributeInstance::VERSION = '2.1204';
+$Moose::Exception::MustSupplyAMooseMetaAttributeInstance::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustSupplyAnAccessorTypeToConstructWith;
-BEGIN {
-  $Moose::Exception::MustSupplyAnAccessorTypeToConstructWith::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustSupplyAnAccessorTypeToConstructWith::VERSION = '2.1204';
+$Moose::Exception::MustSupplyAnAccessorTypeToConstructWith::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustSupplyAnAttributeToConstructWith;
-BEGIN {
-  $Moose::Exception::MustSupplyAnAttributeToConstructWith::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustSupplyAnAttributeToConstructWith::VERSION = '2.1204';
+$Moose::Exception::MustSupplyAnAttributeToConstructWith::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustSupplyArrayRefAsCurriedArguments;
-BEGIN {
-  $Moose::Exception::MustSupplyArrayRefAsCurriedArguments::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustSupplyArrayRefAsCurriedArguments::VERSION = '2.1204';
+$Moose::Exception::MustSupplyArrayRefAsCurriedArguments::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash', 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::MustSupplyPackageNameAndName;
-BEGIN {
-  $Moose::Exception::MustSupplyPackageNameAndName::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::MustSupplyPackageNameAndName::VERSION = '2.1204';
+$Moose::Exception::MustSupplyPackageNameAndName::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,12 +1,11 @@
 package Moose::Exception::NeedsTypeConstraintUnionForTypeCoercionUnion;
-BEGIN {
-  $Moose::Exception::NeedsTypeConstraintUnionForTypeCoercionUnion::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::NeedsTypeConstraintUnionForTypeCoercionUnion::VERSION = '2.1204';
+$Moose::Exception::NeedsTypeConstraintUnionForTypeCoercionUnion::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::TypeConstraint';
 
+# use Moose::Util::TypeConstraints 'find_type_constraint';
+
 has 'type_coercion_union_object' => (
     is       => 'ro',
     isa      => 'Moose::Meta::TypeCoercion::Union',
@@ -15,7 +14,7 @@ has 'type_coercion_union_object' => (
 
 sub _build_message {
     my $self = shift;
-    my $type_constraint = $self->type;
+    my $type_constraint = $self->type_name;
 
     return "You can only create a Moose::Meta::TypeCoercion::Union for a " .
            "Moose::Meta::TypeConstraint::Union, not a $type_constraint"
@@ -1,8 +1,5 @@
 package Moose::Exception::NeitherAttributeNorAttributeNameIsGiven;
-BEGIN {
-  $Moose::Exception::NeitherAttributeNorAttributeNameIsGiven::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::NeitherAttributeNorAttributeNameIsGiven::VERSION = '2.1204';
+$Moose::Exception::NeitherAttributeNorAttributeNameIsGiven::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::NeitherClassNorClassNameIsGiven;
-BEGIN {
-  $Moose::Exception::NeitherClassNorClassNameIsGiven::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::NeitherClassNorClassNameIsGiven::VERSION = '2.1204';
+$Moose::Exception::NeitherClassNorClassNameIsGiven::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::NeitherRoleNorRoleNameIsGiven;
-BEGIN {
-  $Moose::Exception::NeitherRoleNorRoleNameIsGiven::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::NeitherRoleNorRoleNameIsGiven::VERSION = '2.1204';
+$Moose::Exception::NeitherRoleNorRoleNameIsGiven::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::NeitherTypeNorTypeNameIsGiven;
-BEGIN {
-  $Moose::Exception::NeitherTypeNorTypeNameIsGiven::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::NeitherTypeNorTypeNameIsGiven::VERSION = '2.1204';
+$Moose::Exception::NeitherTypeNorTypeNameIsGiven::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,15 +1,12 @@
 package Moose::Exception::NoAttributeFoundInSuperClass;
-BEGIN {
-  $Moose::Exception::NoAttributeFoundInSuperClass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::NoAttributeFoundInSuperClass::VERSION = '2.1204';
+$Moose::Exception::NoAttributeFoundInSuperClass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class', 'Moose::Exception::Role::InvalidAttributeOptions';
 
 sub _build_message {
     my $self = shift;
-    "Could not find an attribute by the name of '".$self->attribute_name."' to inherit from in ".$self->class->name;
+    "Could not find an attribute by the name of '".$self->attribute_name."' to inherit from in ".$self->class_name;
 }
 
 1;
@@ -1,8 +1,5 @@
 package Moose::Exception::NoBodyToInitializeInAnAbstractBaseClass;
-BEGIN {
-  $Moose::Exception::NoBodyToInitializeInAnAbstractBaseClass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::NoBodyToInitializeInAnAbstractBaseClass::VERSION = '2.1204';
+$Moose::Exception::NoBodyToInitializeInAnAbstractBaseClass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::NoCasesMatched;
-BEGIN {
-  $Moose::Exception::NoCasesMatched::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::NoCasesMatched::VERSION = '2.1204';
+$Moose::Exception::NoCasesMatched::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::NoConstraintCheckForTypeConstraint;
-BEGIN {
-  $Moose::Exception::NoConstraintCheckForTypeConstraint::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::NoConstraintCheckForTypeConstraint::VERSION = '2.1204';
+$Moose::Exception::NoConstraintCheckForTypeConstraint::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::TypeConstraint';
@@ -1,8 +1,5 @@
 package Moose::Exception::NoDestructorClassSpecified;
-BEGIN {
-  $Moose::Exception::NoDestructorClassSpecified::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::NoDestructorClassSpecified::VERSION = '2.1204';
+$Moose::Exception::NoDestructorClassSpecified::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class', 'Moose::Exception::Role::ParamsHash';
@@ -1,15 +1,15 @@
 package Moose::Exception::NoImmutableTraitSpecifiedForClass;
-BEGIN {
-  $Moose::Exception::NoImmutableTraitSpecifiedForClass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::NoImmutableTraitSpecifiedForClass::VERSION = '2.1204';
+$Moose::Exception::NoImmutableTraitSpecifiedForClass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class', 'Moose::Exception::Role::ParamsHash';
 
+use Moose::Util 'find_meta';
+
 sub _build_message {
-    my $self = shift;
-    "no immutable trait specified for ".$self->class;
+    my $self  = shift;
+    my $class = find_meta( $self->class_name );
+    "no immutable trait specified for $class";
 }
 
 1;
@@ -1,8 +1,5 @@
 package Moose::Exception::NoParentGivenToSubtype;
-BEGIN {
-  $Moose::Exception::NoParentGivenToSubtype::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::NoParentGivenToSubtype::VERSION = '2.1204';
+$Moose::Exception::NoParentGivenToSubtype::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::OnlyInstancesCanBeCloned;
-BEGIN {
-  $Moose::Exception::OnlyInstancesCanBeCloned::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::OnlyInstancesCanBeCloned::VERSION = '2.1204';
+$Moose::Exception::OnlyInstancesCanBeCloned::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class', 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::OperatorIsRequired;
-BEGIN {
-  $Moose::Exception::OperatorIsRequired::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::OperatorIsRequired::VERSION = '2.1204';
+$Moose::Exception::OperatorIsRequired::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -0,0 +1,60 @@
+package Moose::Exception::OverloadConflictInSummation;
+$Moose::Exception::OverloadConflictInSummation::VERSION = '2.1402';
+use Moose;
+extends 'Moose::Exception';
+
+use Moose::Util 'find_meta';
+
+has 'role_application' => (
+    is       => 'ro',
+    isa      => 'Moose::Meta::Role::Application::RoleSummation',
+    required => 1
+);
+
+has 'role_names' => (
+    traits  => ['Array'],
+    is      => 'bare',
+    isa     => 'ArrayRef[Str]',
+    handles => {
+        role_names => 'elements',
+    },
+    required => 1,
+    documentation =>
+        "This attribute is an ArrayRef containing role names, if you want metaobjects\n"
+        . "associated with these role names, then call method roles on the exception object.\n",
+);
+
+has 'overloaded_op' => (
+    is       => 'ro',
+    isa      => 'Str',
+    required => 1,
+);
+
+sub roles {
+    my $self = shift;
+    my @role_names = $self->role_names;
+    my @roles = map { find_meta($_) } @role_names;
+    return @roles;
+}
+
+sub _build_message {
+    my $self = shift;
+
+    my @roles = $self->role_names;
+    my $role_names = join "|", @roles;
+
+    my $op = $self->overloaded_op;
+    if ( $op eq 'fallback' ) {
+        return
+              'We have encountered an overloading conflict for the fallback '
+            . 'during composition. This is a fatal error.';
+    }
+    else {
+        return
+              "Role '$role_names' has encountered an overloading conflict "
+            . "during composition. The two roles both overload the '$op' operator. "
+            . 'This is a fatal error.';
+    }
+}
+
+1;
@@ -0,0 +1,11 @@
+package Moose::Exception::OverloadRequiresAMetaClass;
+$Moose::Exception::OverloadRequiresAMetaClass::VERSION = '2.1402';
+use Moose;
+extends 'Moose::Exception';
+
+sub _build_message {
+    my $self = shift;
+    'If you provide an associated_metaclass parameter to the Moose::Meta::Overload constructor it must be a Class::MOP::Module object';
+}
+
+1;
@@ -0,0 +1,11 @@
+package Moose::Exception::OverloadRequiresAMetaMethod;
+$Moose::Exception::OverloadRequiresAMetaMethod::VERSION = '2.1402';
+use Moose;
+extends 'Moose::Exception';
+
+sub _build_message {
+    my $self = shift;
+    'If you provide a method parameter to the Moose::Meta::Overload constructor it must be a Class::MOP::Method object';
+}
+
+1;
@@ -0,0 +1,11 @@
+package Moose::Exception::OverloadRequiresAMetaOverload;
+$Moose::Exception::OverloadRequiresAMetaOverload::VERSION = '2.1402';
+use Moose;
+extends 'Moose::Exception';
+
+sub _build_message {
+    my $self = shift;
+    'If you provide an original_overload parameter to the Moose::Meta::Overload constructor it must be a Moose::Meta::Overload object';
+}
+
+1;
@@ -0,0 +1,11 @@
+package Moose::Exception::OverloadRequiresAMethodNameOrCoderef;
+$Moose::Exception::OverloadRequiresAMethodNameOrCoderef::VERSION = '2.1402';
+use Moose;
+extends 'Moose::Exception';
+
+sub _build_message {
+    my $self = shift;
+    'You must provide a method_name or coderef parameter when constructing a Moose::Meta::Overload object';
+}
+
+1;
@@ -0,0 +1,11 @@
+package Moose::Exception::OverloadRequiresAnOperator;
+$Moose::Exception::OverloadRequiresAnOperator::VERSION = '2.1402';
+use Moose;
+extends 'Moose::Exception';
+
+sub _build_message {
+    my $self = shift;
+    'You must provide an operator parameter when constructing a Moose::Meta::Overload object';
+}
+
+1;
@@ -0,0 +1,11 @@
+package Moose::Exception::OverloadRequiresNamesForCoderef;
+$Moose::Exception::OverloadRequiresNamesForCoderef::VERSION = '2.1402';
+use Moose;
+extends 'Moose::Exception';
+
+sub _build_message {
+    my $self = shift;
+    'If you provide a coderef parameter to the Moose::Meta::Overload constructor you must also provide coderef_package and coderef_name parameters';
+}
+
+1;
@@ -1,15 +1,12 @@
 package Moose::Exception::OverrideConflictInComposition;
-BEGIN {
-  $Moose::Exception::OverrideConflictInComposition::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::OverrideConflictInComposition::VERSION = '2.1204';
+$Moose::Exception::OverrideConflictInComposition::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
 
-has 'role_being_applied' => (
+has 'role_being_applied_name' => (
     is       => 'ro',
-    isa      => 'Moose::Meta::Role',
+    isa      => 'Str',
     required => 1
 );
 
@@ -30,12 +27,12 @@ sub _build_message {
     my $self = shift;
 
     if( $self->two_overrides_found ) {
-        return "Role '" . $self->role_being_applied->name . "' has encountered an 'override' method conflict " .
+        return "Role '" . $self->role_being_applied_name . "' has encountered an 'override' method conflict " .
                "during composition (Two 'override' methods of the same name encountered). " .
-               "This is fatal error.";
+               "This is a fatal error.";
     }
     else {
-        return "Role '".$self->role_being_applied->name."' has encountered an 'override' method conflict ".
+        return "Role '".$self->role_being_applied_name."' has encountered an 'override' method conflict ".
                "during composition (A local method of the same name as been found). ".
                "This is a fatal error.";
     }
@@ -1,25 +1,26 @@
 package Moose::Exception::OverrideConflictInSummation;
-BEGIN {
-  $Moose::Exception::OverrideConflictInSummation::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::OverrideConflictInSummation::VERSION = '2.1204';
+$Moose::Exception::OverrideConflictInSummation::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
+use Moose::Util 'find_meta';
+
 has 'role_application' => (
     is       => 'ro',
     isa      => 'Moose::Meta::Role::Application::RoleSummation',
     required => 1
 );
 
-has 'roles' => (
+has 'role_names' => (
     traits   => ['Array'],
     is       => 'bare',
-    isa      => 'ArrayRef[Moose::Meta::Role]',
+    isa      => 'ArrayRef[Str]',
     handles  => {
-        roles      => 'elements',
+        role_names      => 'elements',
     },
-    required => 1
+    required => 1,
+    documentation => "This attribute is an ArrayRef containing role names, if you want metaobjects\n".
+                     "associated with these role names, then call method roles on the exception object.\n",
 );
 
 has 'method_name' => (
@@ -35,11 +36,11 @@ has 'two_overrides_found' => (
     default  => 0
 );
 
-sub role_names {
+sub roles {
     my $self = shift;
-    my @roles = $self->roles;
-    my @role_names = map { $_->name } @roles;
-    return @role_names;
+    my @role_names = $self->role_names;
+    my @roles = map { find_meta($_) } @role_names;
+    return @roles;
 }
 
 sub _build_message {
@@ -51,7 +52,7 @@ sub _build_message {
     if( $self->two_overrides_found ) {
         return "We have encountered an 'override' method conflict ".
                "during composition (Two 'override' methods of the same name encountered). ".
-               "This is fatal error.";
+               "This is a fatal error.";
     }
     else {
         return "Role '$role_names' has encountered an 'override' method conflict " .
@@ -1,8 +1,5 @@
 package Moose::Exception::PackageDoesNotUseMooseExporter;
-BEGIN {
-  $Moose::Exception::PackageDoesNotUseMooseExporter::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::PackageDoesNotUseMooseExporter::VERSION = '2.1204';
+$Moose::Exception::PackageDoesNotUseMooseExporter::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::PackageNameAndNameParamsNotGivenToWrap;
-BEGIN {
-  $Moose::Exception::PackageNameAndNameParamsNotGivenToWrap::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::PackageNameAndNameParamsNotGivenToWrap::VERSION = '2.1204';
+$Moose::Exception::PackageNameAndNameParamsNotGivenToWrap::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::PackagesAndModulesAreNotCachable;
-BEGIN {
-  $Moose::Exception::PackagesAndModulesAreNotCachable::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::PackagesAndModulesAreNotCachable::VERSION = '2.1204';
+$Moose::Exception::PackagesAndModulesAreNotCachable::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class', 'Moose::Exception::Role::ParamsHash';
@@ -1,12 +1,11 @@
 package Moose::Exception::ParameterIsNotSubtypeOfParent;
-BEGIN {
-  $Moose::Exception::ParameterIsNotSubtypeOfParent::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::ParameterIsNotSubtypeOfParent::VERSION = '2.1204';
+$Moose::Exception::ParameterIsNotSubtypeOfParent::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::TypeConstraint';
 
+use Moose::Util::TypeConstraints qw/find_type_constraint/;
+
 has 'type_parameter' => (
     is => 'ro',
     isa => 'Str',
@@ -16,7 +15,8 @@ has 'type_parameter' => (
 sub _build_message {
     my $self = shift;
     my $type_parameter = $self->type_parameter;
-    my $parent = $self->type->parent->type_parameter;
+    my $type           = find_type_constraint( $self->type_name );
+    my $parent         = $type->parent->type_parameter;
 
     return "$type_parameter is not a subtype of $parent";
 }
@@ -1,8 +1,5 @@
 package Moose::Exception::ReferencesAreNotAllowedAsDefault;
-BEGIN {
-  $Moose::Exception::ReferencesAreNotAllowedAsDefault::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::ReferencesAreNotAllowedAsDefault::VERSION = '2.1204';
+$Moose::Exception::ReferencesAreNotAllowedAsDefault::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::RequiredAttributeLacksInitialization;
-BEGIN {
-  $Moose::Exception::RequiredAttributeLacksInitialization::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RequiredAttributeLacksInitialization::VERSION = '2.1204';
+$Moose::Exception::RequiredAttributeLacksInitialization::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::RequiredAttributeNeedsADefault;
-BEGIN {
-  $Moose::Exception::RequiredAttributeNeedsADefault::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RequiredAttributeNeedsADefault::VERSION = '2.1204';
+$Moose::Exception::RequiredAttributeNeedsADefault::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::InvalidAttributeOptions';
@@ -1,8 +1,5 @@
 package Moose::Exception::RequiredMethodsImportedByClass;
-BEGIN {
-  $Moose::Exception::RequiredMethodsImportedByClass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RequiredMethodsImportedByClass::VERSION = '2.1204';
+$Moose::Exception::RequiredMethodsImportedByClass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class', 'Moose::Exception::Role::Role';
@@ -31,7 +28,7 @@ sub _build_message {
     my $list = Moose::Util::english_list( map { q{'} . $_ . q{'} } $self->get_all_methods );
 
     my ($class, $role, $method) = ($self->class_name,
-                                   $self->role->name,
+                                   $self->role_name,
                                    $self->imported_method);
 
     my ($class_quoted, $role_quoted) = ("'".$class."'","'".$role."'");
@@ -1,8 +1,5 @@
 package Moose::Exception::RequiredMethodsNotImplementedByClass;
-BEGIN {
-  $Moose::Exception::RequiredMethodsNotImplementedByClass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RequiredMethodsNotImplementedByClass::VERSION = '2.1204';
+$Moose::Exception::RequiredMethodsNotImplementedByClass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class', 'Moose::Exception::Role::Role';
@@ -1,8 +1,5 @@
 package Moose::Exception::Role::Attribute;
-BEGIN {
-  $Moose::Exception::Role::Attribute::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::Role::Attribute::VERSION = '2.1204';
+$Moose::Exception::Role::Attribute::VERSION = '2.1402';
 use Moose::Role;
 
 has 'attribute' => (
@@ -1,8 +1,5 @@
 package Moose::Exception::Role::AttributeName;
-BEGIN {
-  $Moose::Exception::Role::AttributeName::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::Role::AttributeName::VERSION = '2.1204';
+$Moose::Exception::Role::AttributeName::VERSION = '2.1402';
 use Moose::Role;
 
 has 'attribute_name' => (
@@ -1,57 +1,13 @@
 package Moose::Exception::Role::Class;
-BEGIN {
-  $Moose::Exception::Role::Class::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::Role::Class::VERSION = '2.1204';
-use Moose::Util 'throw_exception';
+$Moose::Exception::Role::Class::VERSION = '2.1402';
 use Moose::Role;
 
-has 'class' => (
-    is        => 'rw',
-    isa       => 'Class::MOP::Class',
-    lazy      => 1,
-    builder   => '_build_class',
-    predicate => 'is_class_set',
-);
-
 has 'class_name' => (
-    is        => 'ro',
-    isa       => 'Str',
-    lazy      => 1,
-    builder   => '_build_class_name',
-    predicate => 'is_class_name_set',
+    is            => 'ro',
+    isa           => 'Str',
+    required      => 1,
+    documentation => "This attribute can be used for fetching metaclass instance:\n".
+                     "    my \$metaclass_instance = Moose::Util::find_meta( \$exception->class_name );\n",
 );
 
-sub _build_class {
-    my $self = $_[0];
-    Class::MOP::class_of( $self->class_name );
-}
-
-sub _build_class_name {
-    my $self = $_[0];
-    $self->class->name;
-}
-
-sub _has_class_or_class_name {
-    my $self = shift;
-
-    return ( $self->is_class_name_set || $self->is_class_set );
-}
-
-after "BUILD" => sub {
-    my $self = $_[0];
-
-    if( !$self->_has_class_or_class_name() )
-    {
-        throw_exception("NeitherClassNorClassNameIsGiven");
-    }
-    elsif( $self->is_class_set && $self->is_class_name_set &&
-           ( $self->class->name ne $self->class_name ) )
-    {
-        throw_exception( ClassNamesDoNotMatch => class_name => $self->class_name,
-                                                 class      => $self->class,
-                       );
-    }
-};
-
 1;
@@ -1,8 +1,5 @@
 package Moose::Exception::Role::EitherAttributeOrAttributeName;
-BEGIN {
-  $Moose::Exception::Role::EitherAttributeOrAttributeName::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::Role::EitherAttributeOrAttributeName::VERSION = '2.1204';
+$Moose::Exception::Role::EitherAttributeOrAttributeName::VERSION = '2.1402';
 use Moose::Util 'throw_exception';
 use Moose::Role;
 
@@ -1,8 +1,5 @@
 package Moose::Exception::Role::Instance;
-BEGIN {
-  $Moose::Exception::Role::Instance::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::Role::Instance::VERSION = '2.1204';
+$Moose::Exception::Role::Instance::VERSION = '2.1402';
 use Moose::Role;
 
 has 'instance' => (
@@ -0,0 +1,11 @@
+package Moose::Exception::Role::InstanceClass;
+$Moose::Exception::Role::InstanceClass::VERSION = '2.1402';
+use Moose::Role;
+
+has 'instance_class' => (
+    is       => 'ro',
+    isa      => 'Str',
+    required => 1,
+);
+
+1;
@@ -1,8 +1,5 @@
 package Moose::Exception::Role::InvalidAttributeOptions;
-BEGIN {
-  $Moose::Exception::Role::InvalidAttributeOptions::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::Role::InvalidAttributeOptions::VERSION = '2.1204';
+$Moose::Exception::Role::InvalidAttributeOptions::VERSION = '2.1402';
 use Moose::Role;
 with 'Moose::Exception::Role::ParamsHash';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::Role::Method;
-BEGIN {
-  $Moose::Exception::Role::Method::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::Role::Method::VERSION = '2.1204';
+$Moose::Exception::Role::Method::VERSION = '2.1402';
 use Moose::Role;
 
 has 'method' => (
@@ -1,8 +1,5 @@
 package Moose::Exception::Role::ParamsHash;
-BEGIN {
-  $Moose::Exception::Role::ParamsHash::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::Role::ParamsHash::VERSION = '2.1204';
+$Moose::Exception::Role::ParamsHash::VERSION = '2.1402';
 use Moose::Role;
 
 has 'params' => (
@@ -1,52 +1,15 @@
 package Moose::Exception::Role::Role;
-BEGIN {
-  $Moose::Exception::Role::Role::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::Role::Role::VERSION = '2.1204';
-use Moose::Util 'throw_exception';
+$Moose::Exception::Role::Role::VERSION = '2.1402';
+# use Moose::Util 'throw_exception';
 use Moose::Role;
 
-has 'role' => (
-    is        => 'rw',
-    isa       => 'Moose::Meta::Role',
-    lazy      => 1,
-    builder   => '_build_role',
-    predicate => 'is_role_set',
-);
-
 has 'role_name' => (
-    is        => 'ro',
-    isa       => 'Str',
-    lazy      => 1,
-    builder   => '_build_role_name',
-    predicate => 'is_role_name_set',
-);
-
-sub _build_role {
-    my $self = $_[0];
-    Class::MOP::class_of( $self->role_name );
-}
+    is            => 'ro',
+    isa           => 'Str',
+    required      => 1,
+    documentation => "This attribute can be used for fetching metaclass instance:\n".
+                     "    my \$metaclass_instance = Moose::Util::find_meta( \$exception->role_name );\n",
 
-sub _build_role_name {
-    my $self = $_[0];
-    $self->role->name;
-}
-
-after "BUILD" => sub {
-    my $self = $_[0];
-    if( !( $self->is_role_name_set) && !( $self->is_role_set) )
-    {
-        throw_exception("NeitherRoleNorRoleNameIsGiven");
-    }
-
-    if( $self->is_role_name_set &&
-        $self->is_role_set &&
-        ( $self->role->name ne $self->role_name ) )
-    {
-        throw_exception( RoleNamesDoNotMatch => role_name => $self->role_name,
-                                                role      => $self->role,
-                       );
-    }
-};
+);
 
 1;
@@ -1,8 +1,5 @@
 package Moose::Exception::Role::RoleForCreate;
-BEGIN {
-  $Moose::Exception::Role::RoleForCreate::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::Role::RoleForCreate::VERSION = '2.1204';
+$Moose::Exception::Role::RoleForCreate::VERSION = '2.1402';
 use Moose::Role;
 with 'Moose::Exception::Role::ParamsHash';
 
@@ -13,4 +10,3 @@ has 'attribute_class' => (
 );
 
 1;
-
@@ -1,8 +1,5 @@
 package Moose::Exception::Role::RoleForCreateMOPClass;
-BEGIN {
-  $Moose::Exception::Role::RoleForCreateMOPClass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::Role::RoleForCreateMOPClass::VERSION = '2.1204';
+$Moose::Exception::Role::RoleForCreateMOPClass::VERSION = '2.1402';
 use Moose::Role;
 with 'Moose::Exception::Role::ParamsHash';
 
@@ -13,4 +10,3 @@ has 'class' => (
 );
 
 1;
-
@@ -1,53 +1,13 @@
 package Moose::Exception::Role::TypeConstraint;
-BEGIN {
-  $Moose::Exception::Role::TypeConstraint::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::Role::TypeConstraint::VERSION = '2.1204';
+$Moose::Exception::Role::TypeConstraint::VERSION = '2.1402';
 use Moose::Role;
-use Moose::Util qw/throw_exception/;
-use Moose::Util::TypeConstraints qw/find_type_constraint/;
-
-has 'type' => (
-    is        => 'rw',
-    isa       => 'Moose::Meta::TypeConstraint',
-    lazy      => 1,
-    builder   => '_build_type',
-    predicate => 'is_type_set',
-);
 
 has 'type_name' => (
-    is        => 'ro',
-    isa       => 'Str',
-    lazy      => 1,
-    builder   => '_build_type_name',
-    predicate => 'is_type_name_set',
+    is            => 'ro',
+    isa           => 'Str',
+    required      => 1,
+    documentation => "This attribute can be used for fetching type constraint(Moose::Meta::TypeConstraint):\n".
+                     "    my \$type_constraint =  Moose::Util::TypeConstraints::find_type_constraint( \$exception->type_name );\n",
 );
 
-sub _build_type {
-    my $self = $_[0];
-    Moose::Util::TypeConstraints::find_type_constraint( $self->type_name );
-}
-
-sub _build_type_name {
-    my $self = $_[0];
-    $self->type->name;
-}
-
-after "BUILD" => sub {
-    my $self = $_[0];
-    if( !( $self->is_type_name_set) && !( $self->is_type_set) )
-    {
-        throw_exception("NeitherTypeNorTypeNameIsGiven");
-    }
-
-    if( $self->is_type_name_set &&
-        $self->is_type_set &&
-        ( $self->type->name ne $self->type_name ) )
-    {
-        throw_exception( TypeNamesDoNotMatch => type_name => $self->type_name,
-                                                type      => $self->type,
-                       );
-    }
-};
-
 1;
@@ -1,27 +1,26 @@
 package Moose::Exception::RoleDoesTheExcludedRole;
-BEGIN {
-  $Moose::Exception::RoleDoesTheExcludedRole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RoleDoesTheExcludedRole::VERSION = '2.1204';
+$Moose::Exception::RoleDoesTheExcludedRole::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
 
-has 'excluded_role' => (
+has 'excluded_role_name' => (
     is       => 'ro',
-    isa      => 'Moose::Meta::Role',
+    isa      => 'Str',
     required => 1
 );
 
-has 'second_role' => (
+has 'second_role_name' => (
     is       => 'ro',
-    isa      => 'Moose::Meta::Role',
+    isa      => 'Str',
     required => 1
 );
 
 sub _build_message {
-    my $self = shift;
-    "The role " . $self->role_name . " does the excluded role '".$self->excluded_role->name."'";
+    my $self               = shift;
+    my $role_name          = $self->role_name;
+    my $excluded_role_name = $self->excluded_role_name;
+    return "The role $role_name does the excluded role '$excluded_role_name'";
 }
 
 1;
@@ -1,8 +1,5 @@
 package Moose::Exception::RoleExclusionConflict;
-BEGIN {
-  $Moose::Exception::RoleExclusionConflict::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RoleExclusionConflict::VERSION = '2.1204';
+$Moose::Exception::RoleExclusionConflict::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
@@ -1,8 +1,5 @@
 package Moose::Exception::RoleNameRequired;
-BEGIN {
-  $Moose::Exception::RoleNameRequired::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RoleNameRequired::VERSION = '2.1204';
+$Moose::Exception::RoleNameRequired::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::RoleNameRequiredForMooseMetaRole;
-BEGIN {
-  $Moose::Exception::RoleNameRequiredForMooseMetaRole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RoleNameRequiredForMooseMetaRole::VERSION = '2.1204';
+$Moose::Exception::RoleNameRequiredForMooseMetaRole::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
@@ -1,26 +0,0 @@
-package Moose::Exception::RoleNamesDoNotMatch;
-BEGIN {
-  $Moose::Exception::RoleNamesDoNotMatch::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RoleNamesDoNotMatch::VERSION = '2.1204';
-use Moose;
-extends 'Moose::Exception';
-
-has role_name => (
-    is       => 'ro',
-    isa      => 'Str',
-    required => 1,
-);
-
-has role => (
-    is       => 'ro',
-    isa      => 'Moose::Meta::Role',
-    required => 1,
-);
-
-sub _build_message {
-    my $self = shift;
-    "role_name (".$self-> role_name.") does not match role->name (".$self->role->name.")";
-}
-
-1;
@@ -1,8 +1,5 @@
 package Moose::Exception::RolesDoNotSupportAugment;
-BEGIN {
-  $Moose::Exception::RolesDoNotSupportAugment::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RolesDoNotSupportAugment::VERSION = '2.1204';
+$Moose::Exception::RolesDoNotSupportAugment::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::RolesDoNotSupportExtends;
-BEGIN {
-  $Moose::Exception::RolesDoNotSupportExtends::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RolesDoNotSupportExtends::VERSION = '2.1204';
+$Moose::Exception::RolesDoNotSupportExtends::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::RolesDoNotSupportInner;
-BEGIN {
-  $Moose::Exception::RolesDoNotSupportInner::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RolesDoNotSupportInner::VERSION = '2.1204';
+$Moose::Exception::RolesDoNotSupportInner::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::RolesDoNotSupportRegexReferencesForMethodModifiers;
-BEGIN {
-  $Moose::Exception::RolesDoNotSupportRegexReferencesForMethodModifiers::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RolesDoNotSupportRegexReferencesForMethodModifiers::VERSION = '2.1204';
+$Moose::Exception::RolesDoNotSupportRegexReferencesForMethodModifiers::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Role';
@@ -1,8 +1,5 @@
 package Moose::Exception::RolesInCreateTakesAnArrayRef;
-BEGIN {
-  $Moose::Exception::RolesInCreateTakesAnArrayRef::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RolesInCreateTakesAnArrayRef::VERSION = '2.1204';
+$Moose::Exception::RolesInCreateTakesAnArrayRef::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::RolesListMustBeInstancesOfMooseMetaRole;
-BEGIN {
-  $Moose::Exception::RolesListMustBeInstancesOfMooseMetaRole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::RolesListMustBeInstancesOfMooseMetaRole::VERSION = '2.1204';
+$Moose::Exception::RolesListMustBeInstancesOfMooseMetaRole::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::SingleParamsToNewMustBeHashRef;
-BEGIN {
-  $Moose::Exception::SingleParamsToNewMustBeHashRef::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::SingleParamsToNewMustBeHashRef::VERSION = '2.1204';
+$Moose::Exception::SingleParamsToNewMustBeHashRef::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::TriggerMustBeACodeRef;
-BEGIN {
-  $Moose::Exception::TriggerMustBeACodeRef::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::TriggerMustBeACodeRef::VERSION = '2.1204';
+$Moose::Exception::TriggerMustBeACodeRef::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::InvalidAttributeOptions';
@@ -1,16 +1,23 @@
 package Moose::Exception::TypeConstraintCannotBeUsedForAParameterizableType;
-BEGIN {
-  $Moose::Exception::TypeConstraintCannotBeUsedForAParameterizableType::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::TypeConstraintCannotBeUsedForAParameterizableType::VERSION = '2.1204';
+$Moose::Exception::TypeConstraintCannotBeUsedForAParameterizableType::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::TypeConstraint';
 
+has 'parent_type_name' => (
+    is            => 'ro',
+    isa           => 'Str',
+    required      => 1,
+    documentation => "This attribute can be used for fetching type constraint(Moose::Meta::TypeConstraint):\n".
+                     "    my \$type_constraint =  Moose::Util::TypeConstraints::find_type_constraint( \$exception->parent_type_name );\n",
+);
+
 sub _build_message {
-    my $self = shift;
-    "The " . $self->type_name . " constraint cannot be used, because "
-    . $self->type->parent->name . " doesn't subtype or coerce from a parameterizable type."
+    my $self             = shift;
+    my $type_name        = $self->type_name;
+    my $parent_type_name = $self->parent_type_name;
+    "The $type_name constraint cannot be used, because "
+        . "$parent_type_name doesn't subtype or coerce from a parameterizable type.";
 }
 
 1;
@@ -1,12 +1,11 @@
 package Moose::Exception::TypeConstraintIsAlreadyCreated;
-BEGIN {
-  $Moose::Exception::TypeConstraintIsAlreadyCreated::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::TypeConstraintIsAlreadyCreated::VERSION = '2.1204';
+$Moose::Exception::TypeConstraintIsAlreadyCreated::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::TypeConstraint';
 
+use Moose::Util::TypeConstraints 'find_type_constraint';
+
 has 'package_defined_in' => (
     is       => 'ro',
     isa      => 'Str',
@@ -14,8 +13,12 @@ has 'package_defined_in' => (
 );
 
 sub _build_message {
-    my $self = shift;
-    "The type constraint '".$self->type->name."' has already been created in ".$self->type->_package_defined_in." and cannot be created again in ".$self->package_defined_in;
+    my $self                    = shift;
+    my $type_name               = $self->type_name;
+    my $type                    = find_type_constraint( $type_name );
+    my $type_package_defined_in = $type->_package_defined_in;
+    my $package_defined_in      = $self->package_defined_in;
+    return "The type constraint '$type_name' has already been created in $type_package_defined_in and cannot be created again in $package_defined_in";
 }
 
 1;
@@ -1,26 +0,0 @@
-package Moose::Exception::TypeNamesDoNotMatch;
-BEGIN {
-  $Moose::Exception::TypeNamesDoNotMatch::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::TypeNamesDoNotMatch::VERSION = '2.1204';
-use Moose;
-extends 'Moose::Exception';
-
-has type_name => (
-    is       => 'ro',
-    isa      => 'Str',
-    required => 1,
-);
-
-has type => (
-    is       => 'ro',
-    isa      => 'Moose::Meta::TypeConstraint',
-    required => 1,
-);
-
-sub _build_message {
-    my $self = shift;
-    "type_name (".$self-> type_name.") does not match type->name (".$self->type->name.")";
-}
-
-1;
@@ -1,8 +1,5 @@
 package Moose::Exception::TypeParameterMustBeMooseMetaType;
-BEGIN {
-  $Moose::Exception::TypeParameterMustBeMooseMetaType::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::TypeParameterMustBeMooseMetaType::VERSION = '2.1204';
+$Moose::Exception::TypeParameterMustBeMooseMetaType::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::TypeConstraint';
@@ -1,8 +1,5 @@
 package Moose::Exception::UnableToCanonicalizeHandles;
-BEGIN {
-  $Moose::Exception::UnableToCanonicalizeHandles::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::UnableToCanonicalizeHandles::VERSION = '2.1204';
+$Moose::Exception::UnableToCanonicalizeHandles::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute';
@@ -1,8 +1,5 @@
 package Moose::Exception::UnableToCanonicalizeNonRolePackage;
-BEGIN {
-  $Moose::Exception::UnableToCanonicalizeNonRolePackage::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::UnableToCanonicalizeNonRolePackage::VERSION = '2.1204';
+$Moose::Exception::UnableToCanonicalizeNonRolePackage::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute';
@@ -1,8 +1,5 @@
 package Moose::Exception::UnableToRecognizeDelegateMetaclass;
-BEGIN {
-  $Moose::Exception::UnableToRecognizeDelegateMetaclass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::UnableToRecognizeDelegateMetaclass::VERSION = '2.1204';
+$Moose::Exception::UnableToRecognizeDelegateMetaclass::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute';
@@ -1,8 +1,5 @@
 package Moose::Exception::UndefinedHashKeysPassedToMethod;
-BEGIN {
-  $Moose::Exception::UndefinedHashKeysPassedToMethod::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::UndefinedHashKeysPassedToMethod::VERSION = '2.1204';
+$Moose::Exception::UndefinedHashKeysPassedToMethod::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::UnionCalledWithAnArrayRefAndAdditionalArgs;
-BEGIN {
-  $Moose::Exception::UnionCalledWithAnArrayRefAndAdditionalArgs::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::UnionCalledWithAnArrayRefAndAdditionalArgs::VERSION = '2.1204';
+$Moose::Exception::UnionCalledWithAnArrayRefAndAdditionalArgs::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::UnionTakesAtleastTwoTypeNames;
-BEGIN {
-  $Moose::Exception::UnionTakesAtleastTwoTypeNames::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::UnionTakesAtleastTwoTypeNames::VERSION = '2.1204';
+$Moose::Exception::UnionTakesAtleastTwoTypeNames::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 
@@ -1,8 +1,5 @@
 package Moose::Exception::ValidationFailedForInlineTypeConstraint;
-BEGIN {
-  $Moose::Exception::ValidationFailedForInlineTypeConstraint::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::ValidationFailedForInlineTypeConstraint::VERSION = '2.1204';
+$Moose::Exception::ValidationFailedForInlineTypeConstraint::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Class';
@@ -1,8 +1,5 @@
 package Moose::Exception::ValidationFailedForTypeConstraint;
-BEGIN {
-  $Moose::Exception::ValidationFailedForTypeConstraint::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::ValidationFailedForTypeConstraint::VERSION = '2.1204';
+$Moose::Exception::ValidationFailedForTypeConstraint::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::Attribute';
@@ -1,8 +1,5 @@
 package Moose::Exception::WrapTakesACodeRefToBless;
-BEGIN {
-  $Moose::Exception::WrapTakesACodeRefToBless::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::WrapTakesACodeRefToBless::VERSION = '2.1204';
+$Moose::Exception::WrapTakesACodeRefToBless::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,8 +1,5 @@
 package Moose::Exception::WrongTypeConstraintGiven;
-BEGIN {
-  $Moose::Exception::WrongTypeConstraintGiven::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::WrongTypeConstraintGiven::VERSION = '2.1204';
+$Moose::Exception::WrongTypeConstraintGiven::VERSION = '2.1402';
 use Moose;
 extends 'Moose::Exception';
 with 'Moose::Exception::Role::ParamsHash';
@@ -1,10 +1,7 @@
 package Moose::Exception;
-BEGIN {
-  $Moose::Exception::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exception::VERSION = '2.1204';
+$Moose::Exception::VERSION = '2.1402';
 use Moose;
-use Devel::StackTrace;
+use Devel::StackTrace 1.33;
 
 has 'trace' => (
     is            => 'ro',
@@ -24,19 +21,28 @@ has 'message' => (
                      "It is lazy and has a default value 'Error'."
 );
 
-use overload
-    '""' => sub {
-        my $self = shift;
-        return $self->trace->as_string,
-    },
+use overload(
+    q{""}    => 'as_string',
     fallback => 1,
-;
+);
 
 sub _build_trace {
     my $self = shift;
+
+    # skip frames that are method calls on the exception object, which include
+    # the object itself in the arguments (but Devel::LeakTrace really ought to
+    # be weakening all references in its frames)
+    my $skip = 0;
+    while (my @c = caller(++$skip)) {
+        last if $c[3] =~ /^(.*)::new$/ && $self->isa($1);
+    }
+    $skip++;
+
     Devel::StackTrace->new(
         message => $self->message,
         indent  => 1,
+        skip_frames => $skip,
+        no_refs => 1,
     );
 }
 
@@ -49,9 +55,43 @@ sub BUILD {
     $self->trace;
 }
 
+sub as_string {
+    my $self = shift;
+
+    if ( $ENV{MOOSE_FULL_EXCEPTION} ) {
+        return $self->trace->as_string;
+    }
+
+    my @frames;
+    my $last_frame;
+    my $in_moose = 1;
+    for my $frame ( $self->trace->frames ) {
+        if ( $in_moose && $frame->package =~ /^(?:Moose|Class::MOP)(?::|$)/ )
+        {
+            $last_frame = $frame;
+            next;
+        }
+        elsif ($last_frame) {
+            push @frames, $last_frame;
+            undef $last_frame;
+        }
+
+        $in_moose = 0;
+        push @frames, $frame;
+    }
+
+    # This would be a somewhat pathological case, but who knows
+    return $self->trace->as_string unless @frames;
+
+    my $message = ( shift @frames )->as_string( 1, {} ) . "\n";
+    $message .= join q{}, map { $_->as_string( 0, {} ) . "\n" } @frames;
+
+    return $message;
+}
+
 1;
 
-# ABSTRACT: Superclass of all Moose exceptions
+# ABSTRACT: Superclass for Moose internal exceptions
 
 __END__
 
@@ -61,34 +101,45 @@ __END__
 
 =head1 NAME
 
-Moose::Exception - Superclass of all Moose exceptions
+Moose::Exception - Superclass for Moose internal exceptions
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
-This class contains attributes which are common to all Moose exceptions
-classes.
+This class contains attributes which are common to all Moose internal
+exception classes.
 
-=head1 ATTRIBUTES
+=head1 WARNING WARNING WARNING
 
-=over 4
+If you're writing your own exception classes, you should instead prefer
+the L<Throwable> role or the L<Throwable::Error> superclass - this is
+effectively a cut-down internal fork of the latter, and not designed
+for use in user code.
 
-=item B<< $exception->trace >>
+Of course if you're writing metaclass traits, it would then make sense to
+subclass the relevant Moose exceptions - but only then.
 
-This attribute contains the stack trace for the given exception. It
-is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
-on $exception->message.
+=head1 METHODS
 
-=item B<< $exception->message >>
+This class provides the following methods:
 
-This attribute contains the exception message. It is read-only and isa Str.
-It is lazy and has a default value 'Error'. Every subclass of L<Moose::Exception>
-is expected to override _build_message method.
+=head2 $exception->message
 
-=back
+This methods returns the exception message.
+
+=head2 $exception->trace
+
+This method returns the stack trace for the given exception.
+
+=head2 $exception->as_string
+
+This method returns a stringified form of the exception, including a stack
+trace. By default, this method skips Moose-internal stack frames until it sees
+a caller outside of the Moose core. If the C<MOOSE_FULL_EXCEPTION> environment
+variable is true, these frames are included.
 
 =head1 SEE ALSO
 
@@ -1,8 +1,5 @@
 package Moose::Exporter;
-BEGIN {
-  $Moose::Exporter::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Exporter::VERSION = '2.1204';
+$Moose::Exporter::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -10,7 +7,7 @@ use Class::Load qw(is_class_loaded);
 use Class::MOP;
 use List::MoreUtils qw( first_index uniq );
 use Moose::Util::MetaRole;
-use Scalar::Util qw(reftype);
+use Scalar::Util 1.11 qw(reftype);
 use Sub::Exporter 0.980;
 use Sub::Name qw(subname);
 
@@ -86,10 +83,16 @@ sub build_import_methods {
     my $package = Class::MOP::Package->initialize($exporting_package);
     for my $to_install ( @{ $args{install} || [] } ) {
         my $symbol = '&' . $to_install;
+
         next
             unless $methods{$to_install}
                 && !$package->has_package_symbol($symbol);
-        $package->add_package_symbol( $symbol, $methods{$to_install} );
+        $package->add_package_symbol(
+            $symbol,
+            subname(
+                $exporting_package . '::' . $to_install, $methods{$to_install}
+            )
+        );
     }
 
     return ( $methods{import}, $methods{unimport}, $methods{init_meta} );
@@ -291,6 +294,16 @@ sub _make_sub_exporter_params {
                     $is_reexport->{$coderef_name} = 1;
                 }
             }
+            elsif ( $name =~ /^(.*)::([^:]+)$/ ) {
+                $sub = $class->_sub_from_package( "$1", "$2" )
+                    or next;
+
+                $coderef_name = "$2";
+
+                if ( $1 ne $package ) {
+                    $is_reexport->{$coderef_name} = 1;
+                }
+            }
             else {
                 $sub = $class->_sub_from_package( $package, $name )
                     or next;
@@ -794,7 +807,7 @@ Moose::Exporter - make an import() and unimport() just like Moose.pm
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -805,7 +818,7 @@ version 2.1204
 
   Moose::Exporter->setup_import_methods(
       with_meta => [ 'has_rw', 'sugar2' ],
-      as_is     => [ 'sugar3', \&Some::Random::thing ],
+      as_is     => [ 'sugar3', \&Some::Random::thing, 'Other::Random::thing' ],
       also      => 'Moose',
   );
 
@@ -1,7 +1,4 @@
-package Moose::Intro;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Intro
 # ABSTRACT: Expanded into Moose::Manual, so go read that
 
 __END__
@@ -16,7 +13,7 @@ Moose::Intro - Expanded into Moose::Manual, so go read that
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,7 +1,4 @@
-package Moose::Manual::Attributes;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::Attributes
 # ABSTRACT: Object attributes with Moose
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::Attributes - Object attributes with Moose
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 INTRODUCTION
 
@@ -1,7 +1,4 @@
-package Moose::Manual::BestPractices;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::BestPractices
 # ABSTRACT: Get the most out of Moose
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::BestPractices - Get the most out of Moose
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 RECOMMENDATIONS
 
@@ -1,7 +1,4 @@
-package Moose::Manual::Classes;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::Classes
 # ABSTRACT: Making your classes use Moose (and subclassing)
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::Classes - Making your classes use Moose (and subclassing)
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 USING MOOSE
 
@@ -1,7 +1,4 @@
-package Moose::Manual::Concepts;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::Concepts
 # ABSTRACT: Moose OO concepts
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::Concepts - Moose OO concepts
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 MOOSE CONCEPTS (VS "OLD SCHOOL" Perl)
 
@@ -1,7 +1,4 @@
-package Moose::Manual::Construction;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::Construction
 # ABSTRACT: Object construction (and destruction) with Moose
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::Construction - Object construction (and destruction) with Moose
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 WHERE'S THE CONSTRUCTOR?
 
@@ -1,7 +1,4 @@
-package Moose::Manual::Contributing;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::Contributing
 # ABSTRACT: How to get involved in Moose
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::Contributing - How to get involved in Moose
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 GETTING INVOLVED
 
@@ -1,7 +1,4 @@
-package Moose::Manual::Delegation;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::Delegation
 # ABSTRACT: Attribute delegation
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::Delegation - Attribute delegation
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 WHAT IS DELEGATION?
 
@@ -1,7 +1,4 @@
-package Moose::Manual::Delta;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::Delta
 # ABSTRACT: Important Changes in Moose
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::Delta - Important Changes in Moose
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -31,6 +28,38 @@ feature.  If you encounter a problem and have a solution but don't see
 it documented here, or think we missed an important feature, please
 send us a patch.
 
+=head1 2.1400
+
+=over 4
+
+=item Overloading implementation has changed
+
+Overloading meta information used to be implemented by a
+C<Class::MOP::Method::Overload> class. This class has been removed, and
+overloading is now implemented by L<Class::MOP::Overload>. Overloading is not
+really equivalent to a method, so the former implementation didn't work
+properly for various cases.
+
+All of the overloading-related methods for classes and roles have the same
+names, but now returns L<Class::MOP::Overload> objects.
+
+=item Core support for overloading in roles
+
+Roles which use overloading now pass that overloading onto other classes (and
+roles) which consume that role.
+
+This works much like L<MooseX::Role::WithOverloading>, except that we properly
+detect overloading conflicts during role summation and when applying one role
+to another. L<MooseX::Role::WithOverloading> did not do any conflict
+detection.
+
+If you want to write code that uses overloading and works with previous
+versions of Moose and this one, upgrade to L<MooseX::Role::WithOverloading>
+version 0.15 or greater. That version will detect when Moose itself handles
+overloading and get out of the way.
+
+=back
+
 =head1 2.1200
 
 =over 4
@@ -335,11 +364,15 @@ After upgrading Moose, running C<moose-outdated | cpanm> should be sufficient
 to ensure that all of the Moose extensions you use will continue to work.
 
 The other part is that Moose's C<META.json> file will also specify the
-conflicts under the C<x_conflicts> key. We are working with the Perl tool chain
+conflicts under the C<x_conflicts> (now C<x_breaks>) key. We are working with the Perl tool chain
 developers to try to get conflicts support added to CPAN clients, and if/when
 that happens, the metadata already exists, and so the conflict checking will
 become automatic.
 
+=item The lazy_build attribute feature is discouraged
+
+While not deprecated, we strongly discourage you from using this feature.
+
 =item Most deprecated APIs/features are slated for removal in Moose 2.0200
 
 Most of the deprecated APIs and features in Moose will start throwing an error
@@ -1,8 +1,8 @@
-package Moose::Manual::Exceptions::Manifest;
 use strict;
 use warnings;
-
+package Moose::Manual::Exceptions::Manifest;
 # ABSTRACT: Moose's Exception Types
+$Moose::Manual::Exceptions::Manifest::VERSION = '2.1402';
 
 __END__
 
@@ -16,68 +16,7 @@ Moose::Manual::Exceptions::Manifest - Moose's Exception Types
 
 =head1 VERSION
 
-version 2.1204
-
-=head1 NAME
-
-Moose::Manual::Exceptions::Manifest - Moose's Exception Types
-
-=head1 VERSION
-
-version 2.1204
-
-=head1 AUTHORS
-
-=over 4
-
-=item *
-
-Stevan Little <stevan.little@iinteractive.com>
-
-=item *
-
-Dave Rolsky <autarch@urth.org>
-
-=item *
-
-Jesse Luehrs <doy@tozt.net>
-
-=item *
-
-Shawn M Moore <code@sartak.org>
-
-=item *
-
-יובל קוג'מן (Yuval Kogman) <nothingmuch@woobling.org>
-
-=item *
-
-Karen Etheridge <ether@cpan.org>
-
-=item *
-
-Florian Ragwitz <rafl@debian.org>
-
-=item *
-
-Hans Dieter Pearcey <hdp@weftsoar.net>
-
-=item *
-
-Chris Prather <chris@prather.org>
-
-=item *
-
-Matt S Trout <mst@shadowcat.co.uk>
-
-=back
-
-=head1 COPYRIGHT AND LICENSE
-
-This software is copyright (c) 2006 by Infinity Interactive, Inc..
-
-This is free software; you can redistribute it and/or modify it under
-the same terms as the Perl 5 programming language system itself.
+version 2.1402
 
 =head1 Moose::Exception::AccessorMustReadWrite
 
@@ -163,15 +102,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -211,15 +146,11 @@ L<Moose::Exception::Role::Role>.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->role_to_be_added >>
 
@@ -258,15 +189,11 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 
 This attribute is read-only, isa Any and is required.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -339,19 +266,15 @@ This attribute is read-only, isa Str and is required.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
-=item B<< $exception->second_role >>
+=item B<< $exception->second_role_name >>
 
-This attribute is read-only, isa L<Moose::Meta::Role> and is required.
+This attribute is read-only, isa Str and is required.
 
 =item B<< $exception->trace >>
 
@@ -388,19 +311,15 @@ This attribute is read-only, isa Str and is required.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
 
-=item B<< $exception->second_role >>
 
-This attribute is read-only, isa L<Moose::Meta::Role> and is required.
+=item B<< $exception->second_role_name >>
+
+This attribute is read-only, isa Str and is required.
 
 =item B<< $exception->trace >>
 
@@ -437,15 +356,11 @@ This attribute is read-only, isa Str and is required.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -471,25 +386,18 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->attribute >>
-
-This attribute is read-only, isa L<Class::MOP::Attribute>, has a predicate
-C<has_attribute> and is optional.
-
 =item B<< $exception->attribute_name >>
 
-This attribute is read-only, isa Str, has a predicate C<has_attribute_name> and
-is optional.
-
-=item B<< $exception->class >>
+This attribute can be used for fetching attribute instance:
+    my $class = Moose::Util::find_meta( $exception->class_name );
+    my $attribute = $class->get_attribute( $exception->attribute_name );
 
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
 
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -514,7 +422,6 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
     Attribute (bar) is required
     Attribute (foo_required) is required
     Attribute (baz) is required
-    Attribute (foo) is required
 
 =head1 Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass
 
@@ -533,15 +440,11 @@ L<Moose::Exception::Role::Class>.
 
 This attribute is read-only, isa Any and is required.
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -592,9 +495,8 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
 =back
 
-=head4 Sample Error Messages:
+=head4 Sample Error Message:
 
-    attribute_name (foo1) does not match attribute->name (foo)
     attribute_name (foo) does not match attribute->name (bar)
 
 =head1 Moose::Exception::AttributeValueIsNotAnObject
@@ -904,15 +806,11 @@ This attribute is read-only, isa Str and is required.
 
 This attribute is read-only, isa Str and is required.
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->instance >>
 
@@ -1038,7 +936,8 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
 =head1 Moose::Exception::CanExtendOnlyClasses
 
-This class is a subclass of L<Moose::Exception>.
+This class is a subclass of L<Moose::Exception> and consumes role
+L<Moose::Exception::Role::Role>.
 
 =over 4
 
@@ -1053,9 +952,11 @@ This class is a subclass of L<Moose::Exception>.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
+=item B<< $exception->role_name >>
+
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
 
-This attribute is read-only, isa L<Moose::Meta::Role> and is required.
 
 =item B<< $exception->trace >>
 
@@ -1123,15 +1024,11 @@ This attribute is read-only, isa Str and is required.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -1166,15 +1063,11 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 
 This attribute is read-only, isa HashRef and is required.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -1211,15 +1104,11 @@ C<has_attribute> and is optional.
 This attribute is read-only, isa Str, has a predicate C<has_attribute_name> and
 is optional.
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -1259,15 +1148,11 @@ L<Moose::Exception::Role::Class> and L<Moose::Exception::Role::Method>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -1363,15 +1248,12 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
 =item B<< $exception->type_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
 =back
 
@@ -1545,15 +1427,12 @@ This attribute is read-only, isa HashRef and is required.
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
 =item B<< $exception->type_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
 =back
 
@@ -1622,15 +1501,12 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
 =item B<< $exception->type_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
 =back
 
@@ -1664,19 +1540,15 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 
 This attribute is read-only, isa L<Moose::Meta::Method> and is required.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
+=item B<< $exception->role_being_applied_name >>
 
-=item B<< $exception->role_being_applied >>
-
-This attribute is read-only, isa L<Moose::Meta::Role> and is required.
+This attribute is read-only, isa Str and is required.
 
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -1707,15 +1579,11 @@ L<Moose::Exception::Role::Role>.
 
 This attribute is read-only, isa Str and is required.
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -1726,15 +1594,11 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 
 This attribute is read-only, isa L<Moose::Meta::Method> and is required.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -1938,15 +1802,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -1992,25 +1852,26 @@ L<Moose::Exception::Role::TypeConstraint>.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->parameterizable_type_object >>
+=item B<< $exception->parameterizable_type_object_name >>
+
+This attribute can be used for fetching parameterizable type
+constraint(Moose::Meta::TypeConstraint::Parameterizable):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint::Parameterizable>
- and is required.
 
 =item B<< $exception->trace >>
 
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
 =item B<< $exception->type_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
+
 
 =item B<< $exception->value >>
 
@@ -2086,15 +1947,12 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
 =item B<< $exception->type_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
 =back
 
@@ -2104,8 +1962,8 @@ This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
 
 =head1 Moose::Exception::CannotLocatePackageInINC
 
-This class is a subclass of L<Moose::Exception> and consume roles
-L<Moose::Exception::Role::ParamsHash>, L<Moose::Exception::Role::TypeConstraint>.
+This class is a subclass of L<Moose::Exception> and consumes role
+L<Moose::Exception::Role::ParamsHash>.
 
 =over 4
 
@@ -2143,19 +2001,14 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
 =item B<< $exception->type >>
 
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
-=item B<< $exception->type_name >>
-
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute is read-only, isa Str and is required.
 
 =back
 
 =head4 Sample Error Message:
 
-    Can't locate Moose::Meta::Int::Custom::Xyz or Xyz in \@INC \(\@INC contains:
+    Can't locate Moose::Meta::Attribute::Custom::Trait::Xyz or Xyz in \@INC \(\@
+INC contains:
 
 =head1 Moose::Exception::CannotMakeMetaclassCompatible
 
@@ -2170,15 +2023,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -2220,15 +2069,11 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 
 This attribute is read-only, isa Str and is required.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -2292,15 +2137,11 @@ L<Moose::Exception::Role::Class> and L<Moose::Exception::Role::Method>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -2365,8 +2206,7 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
 =head1 Moose::Exception::CannotRegisterUnnamedTypeConstraint
 
-This class is a subclass of L<Moose::Exception> and consumes role
-L<Moose::Exception::Role::TypeConstraint>.
+This class is a subclass of L<Moose::Exception>.
 
 =over 4
 
@@ -2386,16 +2226,6 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
-=item B<< $exception->type_name >>
-
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
-
 =back
 
 =head4 Sample Error Message:
@@ -2517,7 +2347,7 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
 This class is a subclass of L<Moose::Exception> and consume roles
 L<Moose::Exception::Role::Class>, L<Moose::Exception::Role::Instance>,
-L<Moose::Exception::Role::ParamsHash>.
+L<Moose::Exception::Role::InstanceClass>, L<Moose::Exception::Role::ParamsHash>.
 
 =over 4
 
@@ -2527,20 +2357,20 @@ L<Moose::Exception::Role::ParamsHash>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->instance >>
 
 This attribute is read-only, isa Object and is required.
 
+=item B<< $exception->instance_class >>
+
+This attribute is read-only, isa Str and is required.
+
 =item B<< $exception->message >>
 
 This attribute is read-only and isa Str. It is lazy and has a default value
@@ -2564,7 +2394,8 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 =head1 Moose::Exception::CanReblessOnlyIntoASuperclass
 
 This class is a subclass of L<Moose::Exception> and consume roles
-L<Moose::Exception::Role::Class> and L<Moose::Exception::Role::Instance>.
+L<Moose::Exception::Role::Class>, L<Moose::Exception::Role::Instance> and
+L<Moose::Exception::Role::InstanceClass>.
 
 =over 4
 
@@ -2574,20 +2405,20 @@ L<Moose::Exception::Role::Class> and L<Moose::Exception::Role::Instance>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->instance >>
 
 This attribute is read-only, isa Object and is required.
 
+=item B<< $exception->instance_class >>
+
+This attribute is read-only, isa Str and is required.
+
 =item B<< $exception->message >>
 
 This attribute is read-only and isa Str. It is lazy and has a default value
@@ -2654,15 +2485,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -2698,34 +2525,26 @@ L<Moose::Exception::Role::Class>, L<Moose::Exception::Role::Role>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
-=item B<< $exception->excluded_role >>
+=item B<< $exception->excluded_role_name >>
 
-This attribute is read-only, isa L<Moose::Meta::Role> and is required.
+This attribute is read-only, isa Str and is required.
 
 =item B<< $exception->message >>
 
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -2770,10 +2589,7 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
 =back
 
-=head4 Sample Error Messages:
-
-    class_name (TestClass1) does not match class->name (TestClass)
-    class_name (Foo) does not match class->name (DoesClassRole)
+=head4 Sample Error Message:
 
 =head1 Moose::Exception::CloneObjectExpectsAnInstanceOfMetaclass
 
@@ -2788,15 +2604,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->instance >>
 
@@ -2857,7 +2669,8 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
 =head1 Moose::Exception::CoercingWithoutCoercions
 
-This class is a subclass of L<Moose::Exception>.
+This class is a subclass of L<Moose::Exception> and consumes role
+L<Moose::Exception::Role::TypeConstraint>.
 
 =over 4
 
@@ -2877,9 +2690,12 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
+=item B<< $exception->type_name >>
 
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint> and is required.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
 =back
 
@@ -2976,24 +2792,20 @@ L<Moose::Exception::Role::Role>.
 
 =over 4
 
-=item B<< $exception->excluded_role >>
+=item B<< $exception->excluded_role_name >>
 
-This attribute is read-only, isa L<Moose::Meta::Role> and is required.
+This attribute is read-only, isa Str and is required.
 
 =item B<< $exception->message >>
 
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -3019,30 +2831,22 @@ L<Moose::Exception::Role::Class> and L<Moose::Exception::Role::Role>.
 
 =over 4
 
-=item B<< $exception->class >>
+=item B<< $exception->class_name >>
 
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
 
-=item B<< $exception->class_name >>
-
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
 
 =item B<< $exception->message >>
 
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -3377,15 +3181,12 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
 =item B<< $exception->type_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
 =back
 
@@ -3814,7 +3615,8 @@ backed by a class
 
 =head1 Moose::Exception::DoesRequiresRoleName
 
-This class is a subclass of L<Moose::Exception>.
+This class is a subclass of L<Moose::Exception> and consumes role
+L<Moose::Exception::Role::Class>.
 
 =over 4
 
@@ -3824,9 +3626,11 @@ This class is a subclass of L<Moose::Exception>.
 
 =over 4
 
-=item B<< $exception->class >>
+=item B<< $exception->class_name >>
+
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
 
-This attribute is read-only, isa L<Moose::Meta::Class> and is required.
 
 =item B<< $exception->message >>
 
@@ -3936,15 +3740,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -4090,15 +3890,15 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
+=item B<< $exception->class_meta_type >>
 
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
+This attribute is read-only, isa Str and is required.
 
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -4204,15 +4004,11 @@ L<Moose::Exception::Role::ParamsHash>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->instance >>
 
@@ -4252,15 +4048,11 @@ L<Moose::Exception::Role::Class>, L<Moose::Exception::Role::ParamsHash>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->instance >>
 
@@ -4345,15 +4137,11 @@ L<Moose::Exception::Role::Class>.
 
 This attribute is read-only, isa Any and is required.
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -4471,15 +4259,12 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
 =item B<< $exception->type_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
 =back
 
@@ -4547,15 +4332,11 @@ This attribute is read-only, isa Str and is required.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -4600,6 +4381,36 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
     contains invalid characters
 
+=head1 Moose::Exception::InvalidOverloadOperator
+
+This class is a subclass of L<Moose::Exception>.
+
+=over 4
+
+=back
+
+=head2 ATTRIBUTES
+
+=over 4
+
+=item B<< $exception->message >>
+
+This attribute is read-only and isa Str. It is lazy and has a default value
+'Error'.
+
+=item B<< $exception->operator >>
+
+This attribute is read-only, isa Defined and is required.
+
+=item B<< $exception->trace >>
+
+This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
+ on $exception->message.
+
+=back
+
+=head4 Sample Error Message:
+
 =head1 Moose::Exception::InvalidRoleApplication
 
 This class is a subclass of L<Moose::Exception> and consumes role
@@ -4617,15 +4428,11 @@ L<Moose::Exception::Role::Class>.
 
 This attribute is read-only, isa Any and is required.
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -4704,15 +4511,12 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
 =item B<< $exception->type_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
 =back
 
@@ -4911,7 +4715,8 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
 =head1 Moose::Exception::MatchActionMustBeACodeRef
 
-This class is a subclass of L<Moose::Exception>.
+This class is a subclass of L<Moose::Exception> and consumes role
+L<Moose::Exception::Role::TypeConstraint>.
 
 =over 4
 
@@ -4939,9 +4744,12 @@ This attribute is read-only, isa Any and is required.
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
+=item B<< $exception->type_name >>
 
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint> and is required.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
 =back
 
@@ -4999,15 +4807,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -5053,15 +4857,11 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 
 This attribute is read-only, isa Str and is required.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -5089,15 +4889,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -5135,15 +4931,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -5179,15 +4971,11 @@ L<Moose::Exception::Role::Role>.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -5245,15 +5033,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -5284,15 +5068,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -5441,15 +5221,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -5480,15 +5256,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->conflict >>
 
@@ -5533,15 +5305,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -5576,15 +5344,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -5685,15 +5449,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -5711,6 +5471,37 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
     You must define an attribute name
 
+=head1 Moose::Exception::MustDefineAnOverloadOperator
+
+This class is a subclass of L<Moose::Exception> and consumes role
+L<Moose::Exception::Role::Instance>.
+
+=over 4
+
+=back
+
+=head2 ATTRIBUTES
+
+=over 4
+
+=item B<< $exception->instance >>
+
+This attribute is read-only, isa Object and is required.
+
+=item B<< $exception->message >>
+
+This attribute is read-only and isa Str. It is lazy and has a default value
+'Error'.
+
+=item B<< $exception->trace >>
+
+This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
+ on $exception->message.
+
+=back
+
+=head4 Sample Error Message:
+
 =head1 Moose::Exception::MustHaveAtLeastOneValueToEnumerate
 
 This class is a subclass of L<Moose::Exception> and consumes role
@@ -5985,15 +5776,11 @@ L<Moose::Exception::Role::Role>.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -6024,15 +5811,11 @@ L<Moose::Exception::Role::Role>.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -6315,15 +6098,11 @@ L<Moose::Exception::Role::Class>, L<Moose::Exception::Role::ParamsHash>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -6405,11 +6184,6 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
 =item B<< $exception->type_coercion_union_object >>
 
 This attribute is read-only, isa L<Moose::Meta::TypeCoercion::Union> and is
@@ -6417,8 +6191,10 @@ required.
 
 =item B<< $exception->type_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
 =back
 
@@ -6481,8 +6257,6 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
 =head4 Sample Error Message:
 
-    You need to give class or class_name or both
-
 =head1 Moose::Exception::NeitherRoleNorRoleNameIsGiven
 
 This class is a subclass of L<Moose::Exception>.
@@ -6509,8 +6283,6 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
 =head4 Sample Error Message:
 
-    You need to give role or role_name or both
-
 =head1 Moose::Exception::NeitherTypeNorTypeNameIsGiven
 
 This class is a subclass of L<Moose::Exception>.
@@ -6537,8 +6309,6 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
 =head4 Sample Error Message:
 
-    You need to give type or type_name or both
-
 =head1 Moose::Exception::NoAttributeFoundInSuperClass
 
 This class is a subclass of L<Moose::Exception> and consume roles
@@ -6558,15 +6328,11 @@ L<Moose::Exception::Role::ParamsHash>.
 
 This attribute is read-only, isa Str and is required.
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -6680,15 +6446,12 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
 =item B<< $exception->type_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
 =back
 
@@ -6710,15 +6473,11 @@ L<Moose::Exception::Role::Class> and L<Moose::Exception::Role::ParamsHash>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -6754,15 +6513,11 @@ L<Moose::Exception::Role::Class> and L<Moose::Exception::Role::ParamsHash>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -6829,15 +6584,11 @@ L<Moose::Exception::Role::Class> and L<Moose::Exception::Role::ParamsHash>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->instance >>
 
@@ -6898,12 +6649,9 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
 =head4 Sample Error Message:
 
-    operator is required
+=head1 Moose::Exception::OverloadConflictInSummation
 
-=head1 Moose::Exception::OverrideConflictInComposition
-
-This class is a subclass of L<Moose::Exception> and consumes role
-L<Moose::Exception::Role::Role>.
+This class is a subclass of L<Moose::Exception>.
 
 =over 4
 
@@ -6918,43 +6666,31 @@ L<Moose::Exception::Role::Role>.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->method_name >>
+=item B<< $exception->overloaded_op >>
 
 This attribute is read-only, isa Str and is required.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
+=item B<< $exception->role_application >>
 
-=item B<< $exception->role_being_applied >>
+This attribute is read-only, isa
+L<Moose::Meta::Role::Application::RoleSummation> and is required.
 
-This attribute is read-only, isa L<Moose::Meta::Role> and is required.
+=item B<< $exception->role_names >>
 
-=item B<< $exception->role_name >>
+This attribute is an ArrayRef containing role names, if you want metaobjects
+associated with these role names, then call method roles on the exception object.
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
 
 =item B<< $exception->trace >>
 
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->two_overrides_found >>
-
-This attribute is read-only, isa Bool, has a default value 0 and is required.
-
 =back
 
-=head4 Sample Error Messages:
-
-    Role 'Foo6' has encountered an 'override' method conflict during composition
- (A local method of the same name as been found). This is a fatal error.
-    Role 'Foo7' has encountered an 'override' method conflict during composition
- (Two 'override' methods of the same name encountered). This is fatal error.
+=head4 Sample Error Message:
 
-=head1 Moose::Exception::OverrideConflictInSummation
+=head1 Moose::Exception::OverloadRequiresAMetaClass
 
 This class is a subclass of L<Moose::Exception>.
 
@@ -6971,25 +6707,230 @@ This class is a subclass of L<Moose::Exception>.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->method_name >>
+=item B<< $exception->trace >>
 
-This attribute is read-only, isa Str and is required.
+This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
+ on $exception->message.
 
-=item B<< $exception->role_application >>
+=back
 
-This attribute is read-only, isa
-L<Moose::Meta::Role::Application::RoleSummation> and is required.
+=head4 Sample Error Message:
 
-=item B<< $exception->roles >>
+=head1 Moose::Exception::OverloadRequiresAMetaMethod
 
-This attribute is read-only, isa ArrayRef[Moose::Meta::Role] and is required.
+This class is a subclass of L<Moose::Exception>.
 
-This attribute has handles as follows:
-    roles                    => elements
+=over 4
 
-=item B<< $exception->trace >>
+=back
 
-This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
+=head2 ATTRIBUTES
+
+=over 4
+
+=item B<< $exception->message >>
+
+This attribute is read-only and isa Str. It is lazy and has a default value
+'Error'.
+
+=item B<< $exception->trace >>
+
+This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
+ on $exception->message.
+
+=back
+
+=head4 Sample Error Message:
+
+=head1 Moose::Exception::OverloadRequiresAMetaOverload
+
+This class is a subclass of L<Moose::Exception>.
+
+=over 4
+
+=back
+
+=head2 ATTRIBUTES
+
+=over 4
+
+=item B<< $exception->message >>
+
+This attribute is read-only and isa Str. It is lazy and has a default value
+'Error'.
+
+=item B<< $exception->trace >>
+
+This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
+ on $exception->message.
+
+=back
+
+=head4 Sample Error Message:
+
+=head1 Moose::Exception::OverloadRequiresAMethodNameOrCoderef
+
+This class is a subclass of L<Moose::Exception>.
+
+=over 4
+
+=back
+
+=head2 ATTRIBUTES
+
+=over 4
+
+=item B<< $exception->message >>
+
+This attribute is read-only and isa Str. It is lazy and has a default value
+'Error'.
+
+=item B<< $exception->trace >>
+
+This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
+ on $exception->message.
+
+=back
+
+=head4 Sample Error Message:
+
+=head1 Moose::Exception::OverloadRequiresAnOperator
+
+This class is a subclass of L<Moose::Exception>.
+
+=over 4
+
+=back
+
+=head2 ATTRIBUTES
+
+=over 4
+
+=item B<< $exception->message >>
+
+This attribute is read-only and isa Str. It is lazy and has a default value
+'Error'.
+
+=item B<< $exception->trace >>
+
+This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
+ on $exception->message.
+
+=back
+
+=head4 Sample Error Message:
+
+=head1 Moose::Exception::OverloadRequiresNamesForCoderef
+
+This class is a subclass of L<Moose::Exception>.
+
+=over 4
+
+=back
+
+=head2 ATTRIBUTES
+
+=over 4
+
+=item B<< $exception->message >>
+
+This attribute is read-only and isa Str. It is lazy and has a default value
+'Error'.
+
+=item B<< $exception->trace >>
+
+This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
+ on $exception->message.
+
+=back
+
+=head4 Sample Error Message:
+
+=head1 Moose::Exception::OverrideConflictInComposition
+
+This class is a subclass of L<Moose::Exception> and consumes role
+L<Moose::Exception::Role::Role>.
+
+=over 4
+
+=back
+
+=head2 ATTRIBUTES
+
+=over 4
+
+=item B<< $exception->message >>
+
+This attribute is read-only and isa Str. It is lazy and has a default value
+'Error'.
+
+=item B<< $exception->method_name >>
+
+This attribute is read-only, isa Str and is required.
+
+=item B<< $exception->role_being_applied_name >>
+
+This attribute is read-only, isa Str and is required.
+
+=item B<< $exception->role_name >>
+
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
+
+=item B<< $exception->trace >>
+
+This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
+ on $exception->message.
+
+=item B<< $exception->two_overrides_found >>
+
+This attribute is read-only, isa Bool, has a default value 0 and is required.
+
+=back
+
+=head4 Sample Error Messages:
+
+    Role 'Foo6' has encountered an 'override' method conflict during composition
+ (A local method of the same name as been found). This is a fatal error.
+    Role 'Foo7' has encountered an 'override' method conflict during composition
+ (Two 'override' methods of the same name encountered). This is a fatal error.
+
+=head1 Moose::Exception::OverrideConflictInSummation
+
+This class is a subclass of L<Moose::Exception>.
+
+=over 4
+
+=back
+
+=head2 ATTRIBUTES
+
+=over 4
+
+=item B<< $exception->message >>
+
+This attribute is read-only and isa Str. It is lazy and has a default value
+'Error'.
+
+=item B<< $exception->method_name >>
+
+This attribute is read-only, isa Str and is required.
+
+=item B<< $exception->role_application >>
+
+This attribute is read-only, isa
+L<Moose::Meta::Role::Application::RoleSummation> and is required.
+
+=item B<< $exception->role_names >>
+
+This attribute is an ArrayRef containing role names, if you want metaobjects
+associated with these role names, then call method roles on the exception object.
+
+
+=item B<< $exception->trace >>
+
+This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
 =item B<< $exception->two_overrides_found >>
@@ -7004,7 +6945,7 @@ This attribute is read-only, isa Bool, has a default value 0 and is required.
 composition (A local method of the same name has been found). This is a fatal
 error.
     We have encountered an 'override' method conflict during composition (Two
-'override' methods of the same name encountered). This is fatal error.
+'override' methods of the same name encountered). This is a fatal error.
 
 =head1 Moose::Exception::PackageDoesNotUseMooseExporter
 
@@ -7097,15 +7038,11 @@ L<Moose::Exception::Role::Class> and L<Moose::Exception::Role::ParamsHash>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->is_module >>
 
@@ -7155,15 +7092,13 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
 =item B<< $exception->type_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
+
 
 =item B<< $exception->type_parameter >>
 
@@ -7306,15 +7241,11 @@ L<Moose::Exception::Role::Class> and L<Moose::Exception::Role::Role>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->imported_method >>
 
@@ -7336,15 +7267,11 @@ This attribute has handles as follows:
     get_method_at            => get
     method_count             => count
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -7368,15 +7295,11 @@ L<Moose::Exception::Role::Class> and L<Moose::Exception::Role::Role>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -7393,15 +7316,11 @@ This attribute has handles as follows:
     get_method_at            => get
     method_count             => count
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -7428,28 +7347,24 @@ L<Moose::Exception::Role::Role>.
 
 =over 4
 
-=item B<< $exception->excluded_role >>
+=item B<< $exception->excluded_role_name >>
 
-This attribute is read-only, isa L<Moose::Meta::Role> and is required.
+This attribute is read-only, isa Str and is required.
 
 =item B<< $exception->message >>
 
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
 
-=item B<< $exception->second_role >>
 
-This attribute is read-only, isa L<Moose::Meta::Role> and is required.
+=item B<< $exception->second_role_name >>
+
+This attribute is read-only, isa Str and is required.
 
 =item B<< $exception->trace >>
 
@@ -7480,15 +7395,11 @@ L<Moose::Exception::Role::Role>.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->roles >>
 
@@ -7519,15 +7430,11 @@ L<Moose::Exception::Role::Class>.
 
 =over 4
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -7563,51 +7470,11 @@ L<Moose::Exception::Role::Role>.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
-
-=item B<< $exception->trace >>
-
-This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
- on $exception->message.
-
-=back
-
-=head4 Sample Error Message:
-
-    You must supply a role name to look for
-
-=head1 Moose::Exception::RoleNamesDoNotMatch
-
-This class is a subclass of L<Moose::Exception>.
-
-=over 4
-
-=back
-
-=head2 ATTRIBUTES
-
-=over 4
-
-=item B<< $exception->message >>
-
-This attribute is read-only and isa Str. It is lazy and has a default value
-'Error'.
-
-=item B<< $exception->role >>
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
 
-This attribute is read-only, isa L<Moose::Meta::Role> and is required.
-
-=item B<< $exception->role_name >>
-
-This attribute is read-only, isa Str and is required.
 
 =item B<< $exception->trace >>
 
@@ -7618,7 +7485,7 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
 =head4 Sample Error Message:
 
-    role_name (Foo) does not match role->name (JustATestRole)
+    You must supply a role name to look for
 
 =head1 Moose::Exception::RolesDoNotSupportAugment
 
@@ -7726,15 +7593,11 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 
 This attribute is read-only, isa Str and is required.
 
-=item B<< $exception->role >>
-
-This attribute is read-only, isa L<Moose::Meta::Role>, has a predicate
-C<is_role_set> and is optional.
-
 =item B<< $exception->role_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_role_name_set> and is
- optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->role_name );
+
 
 =item B<< $exception->trace >>
 
@@ -7905,20 +7768,25 @@ L<Moose::Exception::Role::TypeConstraint>.
 This attribute is read-only and isa Str. It is lazy and has a default value
 'Error'.
 
+=item B<< $exception->parent_type_name >>
+
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->parent_type_name );
+
+
 =item B<< $exception->trace >>
 
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
 =item B<< $exception->type_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
 =back
 
@@ -7954,15 +7822,12 @@ This attribute is read-only, isa Str and is required.
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
 =item B<< $exception->type_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
 =back
 
@@ -7975,42 +7840,6 @@ created again in main
     The type constraint 'Foo3' has already been created in Moose and cannot be
 created again in main
 
-=head1 Moose::Exception::TypeNamesDoNotMatch
-
-This class is a subclass of L<Moose::Exception>.
-
-=over 4
-
-=back
-
-=head2 ATTRIBUTES
-
-=over 4
-
-=item B<< $exception->message >>
-
-This attribute is read-only and isa Str. It is lazy and has a default value
-'Error'.
-
-=item B<< $exception->trace >>
-
-This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
- on $exception->message.
-
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint> and is required.
-
-=item B<< $exception->type_name >>
-
-This attribute is read-only, isa Str and is required.
-
-=back
-
-=head4 Sample Error Message:
-
-    type_name (foo) does not match type->name (bar)
-
 =head1 Moose::Exception::TypeParameterMustBeMooseMetaType
 
 This class is a subclass of L<Moose::Exception> and consumes role
@@ -8034,15 +7863,12 @@ This attribute is read-only and isa Str. It is lazy and has a default value
 This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
  on $exception->message.
 
-=item B<< $exception->type >>
-
-This attribute is read-only, isa L<Moose::Meta::TypeConstraint>, has a predicate
- C<is_type_set> and is optional.
-
 =item B<< $exception->type_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_type_name_set> and is
- optional.
+This attribute can be used for fetching type
+constraint(Moose::Meta::TypeConstraint):
+    my $type_constraint =  Moose::Util::TypeConstraints::find_type_constraint(
+$exception->type_name );
 
 =back
 
@@ -8282,15 +8108,11 @@ L<Moose::Exception::Role::Class>.
 
 This attribute is read-only, isa Str and is required.
 
-=item B<< $exception->class >>
-
-This attribute is read-only, isa L<Class::MOP::Class>, has a predicate
-C<is_class_set> and is optional.
-
 =item B<< $exception->class_name >>
 
-This attribute is read-only, isa Str, has a predicate C<is_class_name_set> and
-is optional.
+This attribute can be used for fetching metaclass instance:
+    my $metaclass_instance = Moose::Util::find_meta( $exception->class_name );
+
 
 =item B<< $exception->message >>
 
@@ -8464,6 +8286,10 @@ This attribute is read-only and isa L<Devel::StackTrace>. It is lazy & dependent
 
     The type constraint for foo must be a subtype of ArrayRef but it's a Int
 
+
+
+=for comment insert generated content here
+
 =head1 AUTHORS
 
 =over 4
@@ -8517,4 +8343,4 @@ This software is copyright (c) 2006 by Infinity Interactive, Inc..
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
 
-=cut
+=cut
\ No newline at end of file
@@ -1,7 +1,4 @@
-package Moose::Manual::Exceptions;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::Exceptions
 # ABSTRACT: Moose's exceptions
 
 __END__
@@ -16,26 +13,37 @@ Moose::Manual::Exceptions - Moose's exceptions
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
+
+=head1 EXCEPTIONS IN MOOSE
+
+Moose will throw an exception for all error conditions. This applies both to
+code in the Moose core I<as well> as to all code generated when a class is
+made immutable. All exceptions are subclasses of the C<Moose::Exception>
+class.
 
-=head1 Exceptions in Moose
+Each type of error has its own unique subclass, and many subclasses have
+additional attributes to provide more information about the error's context,
+such as what classes or roles were involved.
 
-Moose will throw an instance of C<Moose::Exception> when it encounters an error condition.
-There are many specific subclasses of L<Moose::Exception>, each designed specifically for
-its particular error condition. These subclasses have attributes that contain
-relevant information, such as a stack trace, related metaclass objects, etc.
+=head1 EXCEPTION STRINGIFICATION
 
-=head1 Handling Moose Exceptions
+By default, Moose exceptions remove Moose internals from the stack trace. If
+you set the C<MOOSE_FULL_EXCEPTION> environment variable to a true value, then
+the Moose internals will be included in the trace.
 
-Because Moose's exceptions use the standard C<die> mechanism, you are free to catch and handle
-errors however you like. You could use Perl's builtin C<eval> to catch Moose exceptions.
-However due to the subtle problems C<eval> can introduce into
-your programs, the Moose team strongly recommends using L<Try::Tiny> instead. Please refer
-to L<Try::Tiny>'s documentation for a discussion of how C<eval> is dangerous.
+=head1 HANDLING MOOSE EXCEPTIONS
 
-The following example demonstrates how to catch and inspect a L<Moose::Exception>. For the
-sake of simplicity, we will cause a very simple error. The C<extends> keywords expects a list
-of superclass names. If we pass no superclass names, Moose will throw an instance of
+Because Moose's exceptions use the standard C<die> mechanism, you are free to
+catch and handle errors however you like. You could use an C<eval> block to
+catch Moose exceptions. However, the Moose team strongly recommends using
+L<Try::Tiny> instead. Please refer to L<Try::Tiny>'s documentation for a
+discussion of how C<eval> is dangerous.
+
+The following example demonstrates how to catch and inspect a
+L<Moose::Exception>. For the sake of simplicity, we will cause a very simple
+error. The C<extends> keywords expects a list of superclass names. If we pass
+no superclass names, Moose will throw an instance of
 L<Moose::Exception::ExtendsMissingArgs>.
 
 =head2 Catching with Try::Tiny
@@ -47,22 +55,27 @@ L<Moose::Exception::ExtendsMissingArgs>.
     try {
         package Example::Exception;
         use Moose;
-        extends; # <-- error!
-    } catch {
-        # $_ contains the instance of the exception thrown by the above try block
-        # $_ may get clobbered, so we should copy its value to another variable
-        my $exception = $_;
-
-        # exception objects are not ubiquitous in Perl, so we must check whether $exception is blessed
-        # we also need to ensure that $exception is actually the kind of exception we were expecting
-        if ( blessed $exception && $exception->isa("Moose::Exception::ExtendsMissingArgs") ) {
-            # fetch attributes from the $exception object and display a friendly error to the user
-            my $class_name = $exception->class_name;
-            warn "You forgot to specify the superclass of $class_name, dummy!";
-        } else {
-            # you've got some other kind of exception, so just print it
-            # note: all Moose::Exception objects will stringify to a useful error message
-            warn "$exception\n";
+        extends;    # <-- error!
+    }
+    catch {
+        # $_ contains the instance of the exception thrown by the above try
+        # block, but $_ may get clobbered, so we should copy its value to
+        # another variable.
+        my $e = $_;
+
+        # Exception objects are not ubiquitous in Perl, so we must check
+        # whether $e is blessed. We also need to ensure that $e is actually
+        # the kind of exception we were expecting.
+        if ( blessed $e
+            && $e->isa('Moose::Exception::ExtendsMissingArgs') ) {
+
+            my $class_name = $e->class_name;
+            warn "You forgot to specify a superclass for $class_name, silly!";
+        }
+
+        # It's either another type of an object or not an object at all.
+        else {
+            warn "$e\n";
         }
     }
 
@@ -70,6 +83,7 @@ L<Moose::Exception::ExtendsMissingArgs>.
 
     use warnings;
     use strict;
+
     use Try::Tiny;
 
     {
@@ -78,16 +92,16 @@ L<Moose::Exception::ExtendsMissingArgs>.
         use Moose::Util::TypeConstraints;
 
         subtype 'NameStr',
-        as 'Str',
-        where { $_ =~ /^[a-zA-Z]+$/; };
+            as 'Str',
+            where { $_ =~ /^[a-zA-Z]+$/; };
 
-        has 'age' => (
+        has age => (
             is       => 'ro',
             isa      => 'Int',
             required => 1
         );
 
-        has 'name' => (
+        has name => (
             is       => 'ro',
             isa      => 'NameStr',
             required => 1
@@ -95,36 +109,40 @@ L<Moose::Exception::ExtendsMissingArgs>.
     }
 
     my $person;
-    while( !$person ) {
+    while ( !$person ) {
         try {
-            print "Enter your age : ";
+            print 'Enter your age : ';
             my $age = <STDIN>;
             chomp $age;
-            print "Enter your name : ";
+            print 'Enter your name : ';
             my $name = <STDIN>;
             chomp $name;
-            $person = Person->new( age  => $age,
-                                   name => $name
-                                 );
+            $person = Person->new(
+                age  => $age,
+                name => $name
+            );
             my $person_name = $person->name;
             my $person_age  = $person->age;
             print "$person_name is $person_age years old\n";
-        } catch {
-            my $exception = $_;
-
-            if ( blessed $exception && $exception->isa("Moose::Exception::ValidationFailedForTypeConstraint") ) {
+        }
+        catch {
+            my $e = $_;
 
-                # fetch attributes from the $exception object and display a friendly error to the user
-                my $attribute_name = $exception->attribute->name;
-                my $type_name = $exception->type->name;
-                my $value = $exception->value;
+            if (
+                blessed $e
+                && $e->isa(
+                    'Moose::Exception::ValidationFailedForTypeConstraint')
+                ) {
 
-                warn "You entered $value for $attribute_name, which is not $type_name!";
-            } else {
+                my $attribute_name = $e->attribute->name;
+                my $type_name      = $e->type->name;
+                my $value          = $e->value;
 
-                # you've got some other kind of exception, so just print it
-                # note: all Moose::Exception objects will stringify to a useful error message
-                warn "$exception\n";
+                warn
+                    "You entered $value for $attribute_name, which is not a $type_name!";
+            }
+            else {
+                warn "$e\n";
             }
         }
     }
@@ -139,7 +157,7 @@ L<Moose::Exception::ExtendsMissingArgs>.
         package Example::RequiredAttribute;
         use Moose;
 
-        has 'required_attribute' => (
+        has required_attribute => (
             is       => 'ro',
             isa      => 'Int',
             required => 1
@@ -149,33 +167,21 @@ L<Moose::Exception::ExtendsMissingArgs>.
     try {
         # we're not passing required_attribute, so it'll throw an exception
         my $object = Example::RequiredAttribute->new();
-    } catch {
-        my $exception = $_;
-        if ( blessed $exception && $exception->isa("Moose::Exception::AttributeIsRequired") ) {
-
-            # fetch attributes from the $exception object and display only
-            # the topmost frame of the stack trace
-            my $attribute_name = $exception->attribute->name;
-            my $trace = $exception->trace;
-
-            my $frame = $trace->frame(0);
-
-            my $message = $exception->message;
-            my $file    = $frame->{filename};
-            my $line    = $frame->{line};
-
-            warn "$message at $file $line\n";
-        } else {
-
-            # you've got some other kind of exception, so just print it
-            # note: all Moose::Exception objects will stringify to a useful error message
-            warn "$exception\n";
+    }
+    catch {
+        my $e = $_;
+        if ( blessed $e && $e->isa('Moose::Exception::AttributeIsRequired') )
+        {
+            warn $e->message, "\n";
+        }
+        else {
+            warn "$e\n";
         }
     };
 
-=head1 Moose Exception Types
+=head1 MOOSE EXCEPTION CLASSES
 
-These are documented in L<Moose::Manual::Exceptions::Manifest>.
+All the exception classes are listed in L<Moose::Manual::Exceptions::Manifest>.
 
 =head1 AUTHORS
 
@@ -1,7 +1,4 @@
-package Moose::Manual::FAQ;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::FAQ
 # ABSTRACT: Frequently asked questions about Moose
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::FAQ - Frequently asked questions about Moose
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 FREQUENTLY ASKED QUESTIONS
 
@@ -1,7 +1,4 @@
-package Moose::Manual::MOP;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::MOP
 # ABSTRACT: The Moose (and Class::MOP) meta API
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::MOP - The Moose (and Class::MOP) meta API
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 INTRODUCTION
 
@@ -1,7 +1,4 @@
-package Moose::Manual::MethodModifiers;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::MethodModifiers
 # ABSTRACT: Moose's method modifiers
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::MethodModifiers - Moose's method modifiers
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 WHAT IS A METHOD MODIFIER?
 
@@ -1,7 +1,4 @@
-package Moose::Manual::MooseX;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::MooseX
 # ABSTRACT: Recommended Moose extensions
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::MooseX - Recommended Moose extensions
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 MooseX?
 
@@ -1,7 +1,4 @@
-package Moose::Manual::Roles;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::Roles
 # ABSTRACT: Roles, an alternative to deep hierarchies and base classes
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::Roles - Roles, an alternative to deep hierarchies and base classe
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 WHAT IS A ROLE?
 
@@ -276,6 +273,9 @@ A role can be a collection of other roles:
 
   with ('Breakable', 'Breakdancer');
 
+When a role consumes another a role, the I<consuming> role's methods silently
+win in any conflict, and the consumed role's methods are simply ignored.
+
 =head1 METHOD EXCLUSION AND ALIASING
 
 If we want our C<FragileDancer> class to be able to call the methods
@@ -316,6 +316,24 @@ then provide a method of the same name in the class itself.
 
 Also see L<Moose::Cookbook::Roles::Restartable_AdvancedComposition> for an example.
 
+=head1 OVERLOADING
+
+When a Moose role uses overloading, that overloading is composed into any
+classes that consume the role. This includes the setting of the C<fallback>
+value for that role's overloading. Just as with methods and attributes, when a
+role consumes another role, that other role's overloading settings are applied
+to the role.
+
+Just as with methods, there can be conflicts with overloading implementations
+between multiple roles when they are all consumed by a class. If two roles
+both provide different overloading implementations for a given operator, that
+is a conflict. If two roles both implement overloading and have different
+C<fallback> values, that is also considered a conflict. These conflicts are
+detected when multiple roles are being composed into a class together.
+
+When a role consumes another role, the consuming role's overloading fallback
+and operator implementations silently "win" the conflict.
+
 =head1 ROLE EXCLUSION
 
 A role can say that it cannot be combined with some other role. This
@@ -1,7 +1,4 @@
-package Moose::Manual::Support;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::Support
 # ABSTRACT: Policies regarding support, releases, and compatibility.
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::Support - Policies regarding support, releases, and compatibility
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SUPPORT POLICY
 
@@ -121,28 +118,30 @@ http://www.perlmonks.org/?node_id=608144 >>).
 
 =head1 PERL VERSION COMPATIBILITY
 
-As of version 2.00, Moose officially supports being run on perl 5.8.3+. Our
+As of version 2.16, Moose will officially support being run on perl 5.10.1+. Our
 current policy is to support the earliest version of Perl shipped in the latest
 stable release of any major operating system (this tends to mean CentOS). We
 will provide at least six months notice (two major releases) when we decide to
-increase the officially supported Perl version. The next time this will happen
-is in January of 2012, when Moose 2.06 will increase the minimum officially
-supported Perl version to 5.10.1.
+increase the officially supported Perl version.
 
 "Officially supported" does not mean that these are the only versions of Perl
-that Moose will work with. Our declared perl dependency will remain at 5.8.3 as
-long as our test suite continues to pass on 5.8.3. What this does mean is that
-the core Moose dev team will not be spending any time fixing bugs on versions
-that aren't officially supported, and new contributions will not be rejected
-due to being incompatible with older versions of perl except in the most
-trivial of cases. We will, however, still welcome patches to make Moose
+that Moose will work with. Our declared perl dependency will remain at 5.8.3
+as long as our test suite continues to pass on 5.8.3. What this does mean is
+that the core Moose dev team will not be spending any time fixing bugs on
+versions that aren't officially supported, and new contributions will not be
+rejected due to being incompatible with older versions of perl except in the
+most trivial of cases. We will, however, still welcome patches to make Moose
 compatible with earlier versions, if other people are still interested in
-maintaining compatibility. Note that although performance regressions are
-acceptable in order to maintain backwards compatibility (as long as they only
-affect the older versions), functionality changes and buggy behavior will not
-be. If it becomes impossible to provide identical functionality between modern
-Perl versions and unsupported Perl versions, we will increase our declared perl
-dependency instead.
+maintaining compatibility. As such, the current minimum required version of
+5.8.3 will remain for as long as downstream users are happy to assist with
+maintenance.
+
+Note that although performance regressions are acceptable in order to maintain
+backwards compatibility (as long as they only affect the older versions),
+functionality changes and buggy behavior will not be. If it becomes impossible
+to provide identical functionality between modern Perl versions and
+unsupported Perl versions, we will increase our declared perl dependency
+instead.
 
 =head1 CONTRIBUTING
 
@@ -1,7 +1,4 @@
-package Moose::Manual::Types;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::Types
 # ABSTRACT: Moose's type system
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::Types - Moose's type system
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 TYPES IN PERL?
 
@@ -1,7 +1,4 @@
-package Moose::Manual::Unsweetened;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual::Unsweetened
 # ABSTRACT: Moose idioms in plain old Perl 5 without the sugar
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual::Unsweetened - Moose idioms in plain old Perl 5 without the sugar
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,7 +1,4 @@
-package Moose::Manual;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Manual
 # ABSTRACT: What is Moose, and how do I use it?
 
 __END__
@@ -16,7 +13,7 @@ Moose::Manual - What is Moose, and how do I use it?
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 WHAT IS MOOSE?
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Attribute::Native::Trait::Array;
-BEGIN {
-  $Moose::Meta::Attribute::Native::Trait::Array::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Attribute::Native::Trait::Array::VERSION = '2.1204';
+$Moose::Meta::Attribute::Native::Trait::Array::VERSION = '2.1402';
 use Moose::Role;
 with 'Moose::Meta::Attribute::Native::Trait';
 
@@ -26,7 +23,7 @@ Moose::Meta::Attribute::Native::Trait::Array - Helper trait for ArrayRef attribu
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Attribute::Native::Trait::Bool;
-BEGIN {
-  $Moose::Meta::Attribute::Native::Trait::Bool::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Attribute::Native::Trait::Bool::VERSION = '2.1204';
+$Moose::Meta::Attribute::Native::Trait::Bool::VERSION = '2.1402';
 use Moose::Role;
 with 'Moose::Meta::Attribute::Native::Trait';
 
@@ -26,7 +23,7 @@ Moose::Meta::Attribute::Native::Trait::Bool - Helper trait for Bool attributes
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Attribute::Native::Trait::Code;
-BEGIN {
-  $Moose::Meta::Attribute::Native::Trait::Code::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Attribute::Native::Trait::Code::VERSION = '2.1204';
+$Moose::Meta::Attribute::Native::Trait::Code::VERSION = '2.1402';
 use Moose::Role;
 with 'Moose::Meta::Attribute::Native::Trait';
 
@@ -26,7 +23,7 @@ Moose::Meta::Attribute::Native::Trait::Code - Helper trait for CodeRef attribute
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Attribute::Native::Trait::Counter;
-BEGIN {
-  $Moose::Meta::Attribute::Native::Trait::Counter::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Attribute::Native::Trait::Counter::VERSION = '2.1204';
+$Moose::Meta::Attribute::Native::Trait::Counter::VERSION = '2.1402';
 use Moose::Role;
 with 'Moose::Meta::Attribute::Native::Trait';
 
@@ -27,7 +24,7 @@ Moose::Meta::Attribute::Native::Trait::Counter - Helper trait for Int attributes
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Attribute::Native::Trait::Hash;
-BEGIN {
-  $Moose::Meta::Attribute::Native::Trait::Hash::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Attribute::Native::Trait::Hash::VERSION = '2.1204';
+$Moose::Meta::Attribute::Native::Trait::Hash::VERSION = '2.1402';
 use Moose::Role;
 with 'Moose::Meta::Attribute::Native::Trait';
 
@@ -26,7 +23,7 @@ Moose::Meta::Attribute::Native::Trait::Hash - Helper trait for HashRef attribute
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -128,7 +125,7 @@ This method does not accept any arguments.
 
 =item B<count>
 
-Returns the number of elements in the hash. Also useful for not empty:
+Returns the number of elements in the hash. Also useful to check for a nonempty hash, because C<count> returns a true (nonzero) value if there is something in the hash:
 C<< has_options => 'count' >>.
 
 This method does not accept any arguments.
@@ -1,8 +1,5 @@
 package Moose::Meta::Attribute::Native::Trait::Number;
-BEGIN {
-  $Moose::Meta::Attribute::Native::Trait::Number::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Attribute::Native::Trait::Number::VERSION = '2.1204';
+$Moose::Meta::Attribute::Native::Trait::Number::VERSION = '2.1402';
 use Moose::Role;
 with 'Moose::Meta::Attribute::Native::Trait';
 
@@ -26,7 +23,7 @@ Moose::Meta::Attribute::Native::Trait::Number - Helper trait for Num attributes
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Attribute::Native::Trait::String;
-BEGIN {
-  $Moose::Meta::Attribute::Native::Trait::String::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Attribute::Native::Trait::String::VERSION = '2.1204';
+$Moose::Meta::Attribute::Native::Trait::String::VERSION = '2.1402';
 use Moose::Role;
 with 'Moose::Meta::Attribute::Native::Trait';
 
@@ -26,7 +23,7 @@ Moose::Meta::Attribute::Native::Trait::String - Helper trait for Str attributes
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,16 +1,10 @@
 package Moose::Meta::Attribute::Native::Trait;
-BEGIN {
-  $Moose::Meta::Attribute::Native::Trait::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Attribute::Native::Trait::VERSION = '2.1204';
+$Moose::Meta::Attribute::Native::Trait::VERSION = '2.1402';
 use Moose::Role;
 use Module::Runtime 'require_module';
-use List::MoreUtils qw( any uniq );
 use Moose::Deprecated;
-use Moose::Util;
-use Moose::Util::TypeConstraints;
-
 use Moose::Util 'throw_exception';
+use Moose::Util::TypeConstraints;
 
 requires '_helper_type';
 
@@ -31,11 +25,9 @@ sub _check_helper_type {
     my $isa;
     my $isa_name;
 
-    if (
-        Moose::Util::does_role(
-            $options->{isa}, 'Specio::Constraint::Role::Interface'
-        )
-        ) {
+    if (   blessed( $options->{isa} )
+        && $options->{isa}->can('does')
+        && $options->{isa}->does('Specio::Constraint::Role::Interface') ) {
 
         $isa = $options->{isa};
         require Specio::Library::Builtins;
@@ -184,7 +176,7 @@ Moose::Meta::Attribute::Native::Trait - Shared role for native delegation traits
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 BUGS
 
@@ -1,10 +1,7 @@
 use strict;
 use warnings;
 package Moose::Meta::Attribute::Native;
-BEGIN {
-  $Moose::Meta::Attribute::Native::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Attribute::Native::VERSION = '2.1204';
+$Moose::Meta::Attribute::Native::VERSION = '2.1402';
 use Module::Runtime 'require_module';
 
 my @trait_names = qw(Bool Counter Number String Array Hash Code);
@@ -44,7 +41,7 @@ Moose::Meta::Attribute::Native - Delegate to native Perl types
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,13 +1,10 @@
 use strict;
 use warnings;
 package Moose::Meta::Attribute;
-BEGIN {
-  $Moose::Meta::Attribute::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Attribute::VERSION = '2.1204';
+$Moose::Meta::Attribute::VERSION = '2.1402';
 use B ();
-use Scalar::Util 'blessed', 'weaken';
-use List::MoreUtils 'any';
+use Scalar::Util 'blessed';
+use List::Util 1.33 'any';
 use Try::Tiny;
 use overload     ();
 
@@ -44,8 +41,8 @@ sub does {
 }
 
 sub _inline_throw_exception {
-    my ( $self, $throw_args ) = @_;
-    return 'require Moose::Util; Moose::Util::throw_exception('.$throw_args.')';
+    my ( $self, $exception_type, $throw_args ) = @_;
+    return 'die Module::Runtime::use_module("Moose::Exception::' . $exception_type . '")->new(' . ($throw_args || '') . ')';
 }
 
 sub new {
@@ -338,9 +335,8 @@ sub _process_isa_option {
     }
     elsif (
         blessed( $options->{isa} )
-        && Moose::Util::does_role(
-            $options->{isa}, 'Specio::Constraint::Role::Interface'
-        )
+        && $options->{isa}->can('does')
+        && $options->{isa}->does('Specio::Constraint::Role::Interface')
         ) {
         $options->{type_constraint} = $options->{isa};
     }
@@ -491,9 +487,10 @@ sub initialize_instance_slot {
         # skip it if it's lazy
         return if $self->is_lazy;
         # and die if it's required and doesn't have a default value
-        throw_exception(AttributeIsRequired => attribute  => $self,
-                                               class_name => blessed( $instance ),
-                                               params     => $params
+        my $class_name = blessed( $instance );
+        throw_exception(AttributeIsRequired => attribute_name => $self->name,
+                                               class_name     => $class_name,
+                                               params         => $params,
                        )
             if $self->is_required && !$self->has_default && !$self->has_builder;
 
@@ -550,9 +547,10 @@ sub set_value {
 
     my $attr_name = quotemeta($self->name);
 
+    my $class_name = blessed( $instance );
     if ($self->is_required and not @args) {
-        throw_exception( AttributeIsRequired => attribute  => $self,
-                                                class_name => blessed( $instance ),
+        throw_exception( AttributeIsRequired => attribute_name => $self->name,
+                                                class_name     => $class_name,
                        );
     }
 
@@ -633,7 +631,7 @@ sub _inline_check_required {
 
     return (
         'if (@_ < 2) {',
-            $self->_inline_throw_exception( "AttributeIsRequired => ".
+            $self->_inline_throw_exception( AttributeIsRequired =>
                                             'attribute_name      => "'.$attr_name.'",'.
                                             'class_name          => $class_name'
             ) . ';',
@@ -690,7 +688,7 @@ sub _inline_check_constraint {
                 'my $msg = do { local $_ = ' . $value . '; '
                 . $message . '->(' . $value . ');'
                 . '};'.
-                $self->_inline_throw_exception( 'ValidationFailedForInlineTypeConstraint => '.
+                $self->_inline_throw_exception( ValidationFailedForInlineTypeConstraint =>
                                                 'type_constraint_message => $msg , '.
                                                 'class_name              => $class_name, '.
                                                 'attribute_name          => "'.$attr_name.'",'.
@@ -705,7 +703,7 @@ sub _inline_check_constraint {
                 'my $msg = do { local $_ = ' . $value . '; '
                 . $message . '->(' . $value . ');'
                 . '};'.
-                $self->_inline_throw_exception( 'ValidationFailedForInlineTypeConstraint => '.
+                $self->_inline_throw_exception( ValidationFailedForInlineTypeConstraint =>
                                                 'type_constraint_message => $msg , '.
                                                 'class_name              => $class_name, '.
                                                 'attribute_name          => "'.$attr_name.'",'.
@@ -837,7 +835,7 @@ sub get_value {
             return wantarray ? %{ $rv } : $rv;
         }
         else {
-            throw_exception( CannotAutoDereferenceTypeConstraint => type      => $type_constraint,
+            throw_exception( CannotAutoDereferenceTypeConstraint => type_name => $type_constraint->name,
                                                                     instance  => $instance,
                                                                     attribute => $self
                            );
@@ -924,7 +922,7 @@ sub _inline_generate_default {
             'else {',
                 'my $class = ref(' . $instance . ') || ' . $instance . ';',
                 $self->_inline_throw_exception(
-                    "BuilderMethodNotSupportedForInlineAttribute => ".
+                    BuilderMethodNotSupportedForInlineAttribute =>
                     'class_name     => $class,'.
                     'attribute_name => "'.$attr_name_str.'",'.
                     'instance       => '.$instance.','.
@@ -1272,10 +1270,7 @@ sub verify_against_type_constraint {
 }
 
 package Moose::Meta::Attribute::Custom::Moose;
-BEGIN {
-  $Moose::Meta::Attribute::Custom::Moose::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Attribute::Custom::Moose::VERSION = '2.1204';
+$Moose::Meta::Attribute::Custom::Moose::VERSION = '2.1402';
 sub register_implementation { 'Moose::Meta::Attribute' }
 1;
 
@@ -1293,7 +1288,7 @@ Moose::Meta::Attribute - The Moose attribute metaclass
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1395,14 +1390,26 @@ attribute is read.
 If this is true, the attribute's value will be stored as a weak
 reference.
 
+=item * documentation
+
+An arbitrary string that can be retrieved later by calling C<<
+$attr->documentation >>.
+
 =item * auto_deref => $bool
 
+B<Note that in cases where you want this feature you are often better served
+by using a L<Moose::Meta::Attribute::Native> trait instead>.
+
 If this is true, then the reader will dereference the value when it is
 called. The attribute must have a type constraint which defines the
 attribute as an array or hash reference.
 
 =item * lazy_build => $bool
 
+B<Note that use of this feature is strongly discouraged.> Some documentation
+used to encourage use of this feature as a best practice, but we have changed
+our minds.
+
 Setting this to true makes the attribute lazy and provides a number of
 default methods.
 
@@ -1443,11 +1450,6 @@ Note the doubled underscore in the builder name. Internally, Moose
 simply prepends the attribute name with "_build_" to come up with the
 builder name.
 
-=item * documentation
-
-An arbitrary string that can be retrieved later by calling C<<
-$attr->documentation >>.
-
 =back
 
 =item B<< $attr->clone(%options) >>
@@ -1,8 +1,5 @@
 package Moose::Meta::Class::Immutable::Trait;
-BEGIN {
-  $Moose::Meta::Class::Immutable::Trait::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Class::Immutable::Trait::VERSION = '2.1204';
+$Moose::Meta::Class::Immutable::Trait::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -33,7 +30,7 @@ sub does_role {
     my $role = shift;
 
     (defined $role)
-        || throw_exception( RoleNameRequired => class => $self );
+        || throw_exception( RoleNameRequired => class_name => $self->name );
 
     $self->{__immutable}{does_role} ||= { map { $_->name => 1 } $self->calculate_all_roles_with_inheritance };
 
@@ -58,7 +55,7 @@ Moose::Meta::Class::Immutable::Trait - Implements immutability for metaclass obj
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,17 +1,12 @@
-
 package Moose::Meta::Class;
-BEGIN {
-  $Moose::Meta::Class::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Class::VERSION = '2.1204';
+$Moose::Meta::Class::VERSION = '2.1402';
 use strict;
 use warnings;
 
 use Class::MOP;
-use Carp qw( confess );
 use Data::OptList;
-use List::Util qw( first );
-use List::MoreUtils qw( any all uniq first_index );
+use List::Util 1.33 qw( any first );
+use List::MoreUtils qw( uniq first_index );
 use Scalar::Util 'blessed';
 
 use Moose::Meta::Method::Overridden;
@@ -184,7 +179,7 @@ sub add_role {
     my ($self, $role) = @_;
     (blessed($role) && $role->isa('Moose::Meta::Role'))
         || throw_exception( AddRoleTakesAMooseMetaRoleInstance => role_to_be_added => $role,
-                                                                  class            => $self
+                                                                  class_name       => $self->name,
                           );
     push @{$self->roles} => $role;
 }
@@ -199,7 +194,7 @@ sub add_role_application {
     my ($self, $application) = @_;
 
     (blessed($application) && $application->isa('Moose::Meta::Role::Application::ToClass'))
-        || throw_exception( InvalidRoleApplication => class       => $self,
+        || throw_exception( InvalidRoleApplication => class_name  => $self->name,
                                                       application => $application,
                           );
 
@@ -236,7 +231,7 @@ sub does_role {
     my ($self, $role_name) = @_;
 
     (defined $role_name)
-        || throw_exception( RoleNameRequired => class => $self );
+        || throw_exception( RoleNameRequired => class_name => $self->name );
 
     foreach my $class ($self->class_precedence_list) {
         my $meta = Class::MOP::class_of($class);
@@ -256,7 +251,7 @@ sub excludes_role {
     my ($self, $role_name) = @_;
 
     (defined $role_name)
-        || throw_exception( RoleNameRequired => class => $self );
+        || throw_exception( RoleNameRequired => class_name => $self->name );
 
     foreach my $class ($self->class_precedence_list) {
         my $meta = Class::MOP::class_of($class);
@@ -336,7 +331,7 @@ sub _inline_BUILDARGS {
                 'if (scalar @_ == 1) {',
                     'if (!defined($_[0]) || ref($_[0]) ne \'HASH\') {',
                         $self->_inline_throw_exception(
-                            '"SingleParamsToNewMustBeHashRef"'
+                            'SingleParamsToNewMustBeHashRef'
                         ) . ';',
                     '}',
                     '$params = { %{ $_[0] } };',
@@ -383,7 +378,7 @@ sub _inline_check_required_attr {
     return (
         'if (!exists $params->{\'' . $attr->init_arg . '\'}) {',
             $self->_inline_throw_exception(
-                'AttributeIsRequired => '.
+                AttributeIsRequired =>
                 'params         => $params, '.
                 'class_name     => $class_name, '.
                 'attribute_name => "'.quotemeta($attr->name).'"'
@@ -560,7 +555,7 @@ sub superclasses {
         my ($name, $opts) = @{ $super };
         Moose::Util::_load_user_class($name, $opts);
         my $meta = Class::MOP::class_of($name);
-        throw_exception( CanExtendOnlyClasses => role => $meta )
+        throw_exception( CanExtendOnlyClasses => role_name => $meta->name )
             if $meta && $meta->isa('Moose::Meta::Role')
     }
     return $self->SUPER::superclasses(map { $_->[0] } @{ $supers });
@@ -588,8 +583,8 @@ sub add_override_method_modifier {
 
     my $existing_method = $self->get_method($name);
     (!$existing_method)
-        || throw_exception( CannotOverrideLocalMethodIsPresent => class  => $self,
-                                                                  method => $existing_method,
+        || throw_exception( CannotOverrideLocalMethodIsPresent => class_name => $self->name,
+                                                                  method     => $existing_method,
                           );
     $self->add_method($name => Moose::Meta::Method::Overridden->new(
         method  => $method,
@@ -602,8 +597,8 @@ sub add_override_method_modifier {
 sub add_augment_method_modifier {
     my ($self, $name, $method) = @_;
     my $existing_method = $self->get_method($name);
-    throw_exception( CannotAugmentIfLocalMethodPresent => class  => $self,
-                                                          method => $existing_method,
+    throw_exception( CannotAugmentIfLocalMethodPresent => class_name => $self->name,
+                                                          method     => $existing_method,
                    )
         if( $existing_method );
 
@@ -721,7 +716,7 @@ sub _process_inherited_attribute {
 
     my $inherited_attr = $self->find_attribute_by_name($attr_name);
     (defined $inherited_attr)
-        || throw_exception( NoAttributeFoundInSuperClass => class          => $self,
+        || throw_exception( NoAttributeFoundInSuperClass => class_name     => $self->name,
                                                             attribute_name => $attr_name,
                                                             params         => \%options
                           );
@@ -786,8 +781,8 @@ sub _fixup_attributes_after_rebless {
 our $error_level;
 
 sub _inline_throw_exception {
-    my ( $self, $throw_args ) = @_;
-    return 'Moose::Util::throw_exception('.$throw_args.')';
+    my ( $self, $exception_type, $throw_args ) = @_;
+    return 'die Module::Runtime::use_module("Moose::Exception::' . $exception_type . '")->new(' . ($throw_args || '') . ')';
 }
 
 1;
@@ -806,7 +801,7 @@ Moose::Meta::Class - The Moose metaclass
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -881,6 +876,9 @@ Each superclass can be followed by a hash reference containing a
 L<-version|Class::MOP/Class Loading Options> value. If the version
 requirement is not satisfied an error will be thrown.
 
+When you pass classes to this method, we will attempt to load them if they are
+not already loaded.
+
 =item B<< $metaclass->add_override_method_modifier($name, $sub) >>
 
 This adds an C<override> method modifier to the package.
@@ -1,9 +1,5 @@
-
 package Moose::Meta::Instance;
-BEGIN {
-  $Moose::Meta::Instance::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Instance::VERSION = '2.1204';
+$Moose::Meta::Instance::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -29,7 +25,7 @@ Moose::Meta::Instance - The Moose Instance metaclass
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::Writer;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::Writer::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::Writer::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::Writer::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::accessor;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::accessor::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::accessor::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::accessor::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::clear;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::clear::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::clear::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::clear::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::count;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::count::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::count::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::count::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::delete;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::delete::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::delete::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::delete::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::elements;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::elements::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::elements::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::elements::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::first;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::first::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::first::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::first::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -22,7 +19,7 @@ sub _inline_check_arguments {
 
     return (
         'if (!Params::Util::_CODELIKE($_[0])) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $_[0],'.
                                             'method_name             => "first",'.
                                             'type_of_argument        => "code reference",'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::first_index;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::first_index::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::first_index::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::first_index::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -22,7 +19,7 @@ sub _inline_check_arguments {
 
     return (
         'if (!Params::Util::_CODELIKE($_[0])) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $_[0],'.
                                             'method_name             => "first_index",'.
                                             'type_of_argument        => "code reference",'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::get;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::get::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::get::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::get::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::grep;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::grep::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::grep::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::grep::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -21,7 +18,7 @@ sub _inline_check_arguments {
 
     return (
         'if (!Params::Util::_CODELIKE($_[0])) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $_[0],'.
                                             'method_name             => "grep",'.
                                             'type_of_argument        => "code reference",'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::insert;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::insert::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::insert::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::insert::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::is_empty;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::is_empty::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::is_empty::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::is_empty::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::join;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::join::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::join::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::join::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -21,7 +18,7 @@ sub _inline_check_arguments {
 
     return (
         'if (!Moose::Util::_STRINGLIKE0($_[0])) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $_[0],'.
                                             'method_name             => "join",'.
                                             'type_of_argument        => "string",'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::map;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::map::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::map::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::map::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -21,7 +18,7 @@ sub _inline_check_arguments {
 
     return (
         'if (!Params::Util::_CODELIKE($_[0])) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $_[0],'.
                                             'method_name             => "map",'.
                                             'type_of_argument        => "code reference",'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::natatime;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::natatime::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::natatime::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::natatime::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -22,7 +19,7 @@ sub _inline_check_arguments {
 
     return (
         'if (!defined($_[0]) || $_[0] !~ /^\d+$/) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $_[0],'.
                                             'method_name             => "natatime",'.
                                             'type_of_argument        => "integer",'.
@@ -31,7 +28,7 @@ sub _inline_check_arguments {
             ) . ';',
         '}',
         'if (@_ == 2 && !Params::Util::_CODELIKE($_[1])) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $_[1],'.
                                             'method_name             => "natatime",'.
                                             'type_of_argument        => "code reference",'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::pop;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::pop::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::pop::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::pop::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::push;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::push::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::push::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::push::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::reduce;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::reduce::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::reduce::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::reduce::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -22,7 +19,7 @@ sub _inline_check_arguments {
 
     return (
         'if (!Params::Util::_CODELIKE($_[0])) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $_[0],'.
                                             'method_name             => "reduce",'.
                                             'type_of_argument        => "code reference",'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::set;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::set::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::set::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::set::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::shallow_clone;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::shallow_clone::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::shallow_clone::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::shallow_clone::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::shift;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::shift::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::shift::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::shift::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::shuffle;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::shuffle::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::shuffle::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::shuffle::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::sort;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::sort::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::sort::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::sort::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -19,7 +16,7 @@ sub _inline_check_arguments {
 
     return (
         'if (@_ && !Params::Util::_CODELIKE($_[0])) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $_[0],'.
                                             'method_name             => "sort",'.
                                             'type_of_argument        => "code reference",'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::sort_in_place;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::sort_in_place::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::sort_in_place::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::sort_in_place::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -19,7 +16,7 @@ sub _inline_check_arguments {
 
     return (
         'if (@_ && !Params::Util::_CODELIKE($_[0])) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $_[0],'.
                                             'method_name             => "sort_in_place",'.
                                             'type_of_argument        => "code reference",'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::splice;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::splice::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::splice::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::splice::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -27,7 +24,7 @@ sub _inline_check_arguments {
     return (
         $self->_inline_check_var_is_valid_index('$idx'),
         'if (defined($len) && $len !~ /^-?\d+$/) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $len,'.
                                             'method_name             => "splice",'.
                                             'type_of_argument        => "integer",'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::uniq;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::uniq::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::uniq::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::uniq::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array::unshift;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::unshift::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::unshift::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::unshift::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Array;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Array::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Array::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Array::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -16,7 +13,7 @@ sub _inline_check_var_is_valid_index {
 
     return (
         'if (!defined(' . $var . ') || ' . $var . ' !~ /^-?\d+$/) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => '.$var.','.
                                             'method_name             => "'.$self->delegate_to_method.'",'.
                                             'type_of_argument        => "integer",'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Bool::not;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Bool::not::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Bool::not::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Bool::not::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Bool::set;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Bool::set::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Bool::set::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Bool::set::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Bool::toggle;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Bool::toggle::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Bool::toggle::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Bool::toggle::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Bool::unset;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Bool::unset::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Bool::unset::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Bool::unset::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Code::execute;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Code::execute::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Code::execute::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Code::execute::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Code::execute_method;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Code::execute_method::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Code::execute_method::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Code::execute_method::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Collection;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Collection::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Collection::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Collection::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -111,7 +108,7 @@ sub _inline_check_member_constraint {
         'for my $new_val (' . $new_value . ') {',
             "if ($check) {",
                 'my $msg = do { local $_ = $new_val; $member_message->($new_val) };'.
-                $self->_inline_throw_exception( "ValidationFailedForInlineTypeConstraint => ".
+                $self->_inline_throw_exception( ValidationFailedForInlineTypeConstraint =>
                                                 "attribute_name          => '".$attr_name."',".
                                                 'type_constraint_message => $msg,'.
                                                 'class_name              => $class_name,'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Counter::Writer;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Counter::Writer::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Counter::Writer::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Counter::Writer::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Counter::dec;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Counter::dec::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Counter::dec::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Counter::dec::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Counter::inc;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Counter::inc::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Counter::inc::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Counter::inc::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Counter::reset;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Counter::reset::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Counter::reset::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Counter::reset::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Counter::set;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Counter::set::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Counter::set::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Counter::set::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::Writer;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::Writer::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::Writer::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::Writer::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::accessor;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::accessor::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::accessor::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::accessor::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::clear;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::clear::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::clear::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::clear::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::count;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::count::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::count::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::count::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::defined;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::defined::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::defined::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::defined::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::delete;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::delete::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::delete::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::delete::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::elements;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::elements::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::elements::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::elements::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::exists;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::exists::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::exists::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::exists::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::get;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::get::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::get::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::get::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::is_empty;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::is_empty::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::is_empty::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::is_empty::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::keys;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::keys::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::keys::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::keys::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::kv;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::kv::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::kv::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::kv::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::set;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::set::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::set::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::set::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -24,7 +21,7 @@ around _inline_check_argument_count => sub {
     return (
         $self->$orig(@_),
         'if (@_ % 2) {',
-            $self->_inline_throw_exception( "MustPassEvenNumberOfArguments => ".
+            $self->_inline_throw_exception( MustPassEvenNumberOfArguments =>
                                             "method_name => '".$self->delegate_to_method."',".
                                             'args        => \@_',
             ) . ';',
@@ -47,7 +44,7 @@ sub _inline_check_arguments {
     return (
         'for (@keys_idx) {',
             'if (!defined($_[$_])) {',
-                $self->_inline_throw_exception( "UndefinedHashKeysPassedToMethod => ".
+                $self->_inline_throw_exception( UndefinedHashKeysPassedToMethod =>
                                                 'hash_keys                       => \@keys_idx,'.
                                                 "method_name                     => '".$self->delegate_to_method."'",
                 ) . ';',
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::shallow_clone;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::shallow_clone::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::shallow_clone::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::shallow_clone::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash::values;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::values::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::values::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::values::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Hash;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Hash::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Hash::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Hash::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -14,7 +11,7 @@ sub _inline_check_var_is_valid_key {
 
     return (
         'if (!defined(' . $var . ')) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => '.$var.','.
                                             'method_name             => "'.$self->delegate_to_method.'",'.
                                             'type_of_argument        => "defined value",'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Number::abs;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Number::abs::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Number::abs::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Number::abs::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Number::add;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Number::add::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Number::add::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Number::add::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Number::div;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Number::div::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Number::div::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Number::div::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Number::mod;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Number::mod::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Number::mod::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Number::mod::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Number::mul;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Number::mul::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Number::mul::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Number::mul::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Number::set;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Number::set::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Number::set::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Number::set::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Number::sub;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Number::sub::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Number::sub::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Number::sub::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::Reader;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Reader::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Reader::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Reader::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::String::append;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::String::append::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::String::append::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::String::append::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::String::chomp;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::String::chomp::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::String::chomp::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::String::chomp::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::String::chop;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::String::chop::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::String::chop::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::String::chop::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::String::clear;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::String::clear::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::String::clear::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::String::clear::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::String::inc;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::String::inc::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::String::inc::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::String::inc::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::String::length;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::String::length::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::String::length::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::String::length::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::String::match;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::String::match::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::String::match::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::String::match::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -22,7 +19,7 @@ sub _inline_check_arguments {
 
     return (
         'if (!Moose::Util::_STRINGLIKE0($_[0]) && !Params::Util::_REGEX($_[0])) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $_[0],'.
                                             'type                    => "Str|RegexpRef",'.
                                             'type_of_argument        => "string or regexp reference",'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::String::prepend;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::String::prepend::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::String::prepend::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::String::prepend::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::String::replace;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::String::replace::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::String::replace::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::String::replace::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -22,7 +19,7 @@ sub _inline_check_arguments {
 
     return (
         'if (!Moose::Util::_STRINGLIKE0($_[0]) && !Params::Util::_REGEX($_[0])) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $_[0],'.
                                             'method_name             => "replace",'.
                                             'ordinal                 => "first",'.
@@ -31,7 +28,7 @@ sub _inline_check_arguments {
             ) . ';',
         '}',
         'if (!Moose::Util::_STRINGLIKE0($_[1]) && !Params::Util::_CODELIKE($_[1])) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $_[1],'.
                                             'method_name             => "replace",'.
                                             'ordinal                 => "second",'.
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Accessor::Native::String::substr;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::String::substr::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::String::substr::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::String::substr::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -56,7 +53,7 @@ sub _inline_check_arguments {
 
     my @code = (
         'if ($offset !~ /^-?\d+$/) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $offset,'.
                                             'ordinal                 => "first",'.
                                             'type_of_argument        => "integer",'.
@@ -65,7 +62,7 @@ sub _inline_check_arguments {
             ) . ';',
         '}',
         'if ($length !~ /^-?\d+$/) {',
-            $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+            $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                             'argument                => $length,'.
                                             'ordinal                 => "second",'.
                                             'type_of_argument        => "integer",'.
@@ -78,7 +75,7 @@ sub _inline_check_arguments {
     if ($for_writer) {
         push @code, (
             'if (!Moose::Util::_STRINGLIKE0($replacement)) {',
-                $self->_inline_throw_exception( "InvalidArgumentToMethod => ".
+                $self->_inline_throw_exception( InvalidArgumentToMethod =>
                                                 'argument                => $replacement,'.
                                                 'ordinal                 => "third",'.
                                                 'type_of_argument        => "string",'.
@@ -1,12 +1,9 @@
 package Moose::Meta::Method::Accessor::Native::Writer;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::Writer::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::Writer::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::Writer::VERSION = '2.1402';
 use strict;
 use warnings;
 
-use List::MoreUtils qw( any );
+use List::Util 1.33 qw( any );
 use Moose::Util;
 
 use Moose::Role;
@@ -91,8 +88,9 @@ sub _is_root_type {
     my $self = shift;
     my $type = shift;
 
-    if (
-        Moose::Util::does_role( $type, 'Specio::Constraint::Role::Interface' ) )
+    if (   blessed($type)
+        && $type->can('does')
+        && $type->does('Specio::Constraint::Role::Interface') )
     {
         require Specio::Library::Builtins;
         return
@@ -1,13 +1,10 @@
 package Moose::Meta::Method::Accessor::Native;
-BEGIN {
-  $Moose::Meta::Method::Accessor::Native::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::Native::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::Native::VERSION = '2.1402';
 use strict;
 use warnings;
 
 use Carp qw( confess );
-use Scalar::Util qw( blessed weaken );
+use Scalar::Util qw( blessed );
 
 use Moose::Role;
 
@@ -76,7 +73,7 @@ sub _inline_check_argument_count {
     if (my $min = $self->_minimum_arguments) {
         push @code, (
             'if (@_ < ' . $min . ') {',
-                $self->_inline_throw_exception( "MethodExpectsMoreArgs => ".
+                $self->_inline_throw_exception( MethodExpectsMoreArgs =>
                                                 'method_name           => "'.$self->delegate_to_method.'",'.
                                                 "minimum_args          => ".$min,
                 ) . ';',
@@ -87,7 +84,7 @@ sub _inline_check_argument_count {
     if (defined(my $max = $self->_maximum_arguments)) {
         push @code, (
             'if (@_ > ' . $max . ') {',
-                $self->_inline_throw_exception( "MethodExpectsFewerArgs => ".
+                $self->_inline_throw_exception( MethodExpectsFewerArgs =>
                                                 'method_name            => "'.$self->delegate_to_method.'",'.
                                                 'maximum_args           => '.$max,
                 ) . ';',
@@ -1,9 +1,5 @@
-
 package Moose::Meta::Method::Accessor;
-BEGIN {
-  $Moose::Meta::Method::Accessor::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Accessor::VERSION = '2.1204';
+$Moose::Meta::Method::Accessor::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -140,7 +136,7 @@ Moose::Meta::Method::Accessor - A Moose Method metaclass for accessors
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Augmented;
-BEGIN {
-  $Moose::Meta::Method::Augmented::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Augmented::VERSION = '2.1204';
+$Moose::Meta::Method::Augmented::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -74,7 +71,7 @@ Moose::Meta::Method::Augmented - A Moose Method metaclass for augmented methods
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,16 +1,9 @@
-
 package Moose::Meta::Method::Constructor;
-BEGIN {
-  $Moose::Meta::Method::Constructor::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Constructor::VERSION = '2.1204';
+$Moose::Meta::Method::Constructor::VERSION = '2.1402';
 use strict;
 use warnings;
 
-use Carp ();
-use List::MoreUtils 'any';
-use Scalar::Util 'blessed', 'weaken', 'looks_like_number', 'refaddr';
-use Try::Tiny;
+use Scalar::Util 'weaken';
 
 use parent 'Moose::Meta::Method',
          'Class::MOP::Method::Constructor';
@@ -76,7 +69,7 @@ Moose::Meta::Method::Constructor - Method Meta Object for constructors
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,9 +1,5 @@
-
 package Moose::Meta::Method::Delegation;
-BEGIN {
-  $Moose::Meta::Method::Delegation::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Delegation::VERSION = '2.1204';
+$Moose::Meta::Method::Delegation::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -152,7 +148,7 @@ Moose::Meta::Method::Delegation - A Moose Method metaclass for delegation method
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,9 +1,5 @@
-
 package Moose::Meta::Method::Destructor;
-BEGIN {
-  $Moose::Meta::Method::Destructor::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Destructor::VERSION = '2.1204';
+$Moose::Meta::Method::Destructor::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -148,7 +144,7 @@ Moose::Meta::Method::Destructor - Method Meta Object for destructors
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,9 +1,5 @@
-
 package Moose::Meta::Method::Meta;
-BEGIN {
-  $Moose::Meta::Method::Meta::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Meta::VERSION = '2.1204';
+$Moose::Meta::Method::Meta::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -44,7 +40,7 @@ Moose::Meta::Method::Meta - A Moose Method metaclass for C<meta> methods
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method::Overridden;
-BEGIN {
-  $Moose::Meta::Method::Overridden::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::Overridden::VERSION = '2.1204';
+$Moose::Meta::Method::Overridden::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -67,7 +64,7 @@ Moose::Meta::Method::Overridden - A Moose Method metaclass for overridden method
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Method;
-BEGIN {
-  $Moose::Meta::Method::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Method::VERSION = '2.1204';
+$Moose::Meta::Method::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -28,7 +25,7 @@ Moose::Meta::Method - A Moose Method metaclass
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,8 +1,5 @@
 package Moose::Meta::Mixin::AttributeCore;
-BEGIN {
-  $Moose::Meta::Mixin::AttributeCore::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Mixin::AttributeCore::VERSION = '2.1204';
+$Moose::Meta::Mixin::AttributeCore::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -119,7 +116,7 @@ Moose::Meta::Mixin::AttributeCore - Core attributes shared by attribute metaclas
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,9 +1,5 @@
-
 package Moose::Meta::Object::Trait;
-BEGIN {
-  $Moose::Meta::Object::Trait::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Object::Trait::VERSION = '2.1204';
+$Moose::Meta::Object::Trait::VERSION = '2.1402';
 use Scalar::Util qw(blessed);
 
 sub _get_compatible_metaclass {
@@ -43,7 +39,7 @@ Moose::Meta::Object::Trait - Some overrides for L<Class::MOP::Object> functional
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,12 +1,10 @@
 package Moose::Meta::Role::Application::RoleSummation;
-BEGIN {
-  $Moose::Meta::Role::Application::RoleSummation::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Role::Application::RoleSummation::VERSION = '2.1204';
+$Moose::Meta::Role::Application::RoleSummation::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
 
+use List::Util 1.33 qw( all );
 use Scalar::Util 'blessed';
 
 use Moose::Meta::Role::Composite;
@@ -136,9 +134,9 @@ sub apply_attributes {
             my $role1 = $seen{$name}->associated_role->name;
             my $role2 = $attr->associated_role->name;
 
-            throw_exception( AttributeConflictInSummation => attribute_name => $name,
-                                                             role_name      => $role1,
-                                                             second_role    => Class::MOP::class_of($role2)
+            throw_exception( AttributeConflictInSummation => attribute_name   => $name,
+                                                             role_name        => $role1,
+                                                             second_role_name => $role2,
                            );
         }
 
@@ -218,15 +216,16 @@ sub apply_override_method_modifiers {
 
     my %seen;
     foreach my $override (@all_overrides) {
+        my @role_names = map { $_->name } @{$c->get_roles};
         if ( $c->has_method($override->{name}) ){
-            throw_exception( OverrideConflictInSummation => roles            => $c->get_roles,
+            throw_exception( OverrideConflictInSummation => role_names       => \@role_names,
                                                             role_application => $self,
                                                             method_name      => $override->{name}
                            );
         }
         if (exists $seen{$override->{name}}) {
             if ( $seen{$override->{name}} != $override->{method} ) {
-                throw_exception( OverrideConflictInSummation => roles               => $c->get_roles,
+                throw_exception( OverrideConflictInSummation => role_names          => \@role_names,
                                                                 role_application    => $self,
                                                                 method_name         => $override->{name},
                                                                 two_overrides_found => 1
@@ -256,6 +255,71 @@ sub apply_method_modifiers {
     }
 }
 
+sub apply_overloading {
+    my ( $self, $c ) = @_;
+
+    my @overloaded_roles = grep { $_->is_overloaded } @{ $c->get_roles };
+    return unless @overloaded_roles;
+
+    my %fallback;
+    for my $role (@overloaded_roles) {
+        $fallback{ $role->name } = $role->get_overload_fallback_value;
+    }
+
+    for my $role_name ( keys %fallback ) {
+        for my $other_role_name ( grep { $_ ne $role_name } keys %fallback ) {
+            my @fb_values = @fallback{ $role_name, $other_role_name };
+            if ( all {defined} @fb_values ) {
+                next if $fallback{$role_name} eq $fallback{$other_role_name};
+                throw_exception(
+                    'OverloadConflictInSummation',
+                    role_names       => [ $role_name, $other_role_name ],
+                    role_application => $self,
+                    overloaded_op    => 'fallback',
+                );
+            }
+
+            next if all { !defined } @fb_values;
+            throw_exception(
+                'OverloadConflictInSummation',
+                role_names       => [ $role_name, $other_role_name ],
+                role_application => $self,
+                overloaded_op    => 'fallback',
+            );
+        }
+    }
+
+    if ( keys %fallback ) {
+        $c->set_overload_fallback_value( ( values %fallback )[0] );
+    }
+
+    my %overload_map;
+    for my $role (@overloaded_roles) {
+        for my $overload ( $role->get_all_overloaded_operators ) {
+            $overload_map{ $overload->operator }{ $role->name } = $overload;
+        }
+    }
+
+    for my $op_name ( keys %overload_map ) {
+        my @roles = keys %{ $overload_map{$op_name} };
+        my $overload = $overload_map{$op_name}{ $roles[0] };
+
+        if ( @roles > 1 && !all { $overload->_is_equal_to($_) }
+            values %{ $overload_map{$op_name} } ) {
+
+            throw_exception(
+                'OverloadConflictInSummation',
+                role_names       => [ @roles[ 0, 1 ] ],
+                role_application => $self,
+                overloaded_op    => $op_name,
+            );
+        }
+
+        $c->add_overloaded_operator(
+            $op_name => $overload_map{$op_name}{ $roles[0] } );
+    }
+}
+
 1;
 
 # ABSTRACT: Combine two or more roles
@@ -272,7 +336,7 @@ Moose::Meta::Role::Application::RoleSummation - Combine two or more roles
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -311,16 +375,14 @@ bindings and 'disabling' the conflicting bindings
 
 =item B<apply_methods>
 
+=item B<apply_overloading>
+
 =item B<apply_method_modifiers>
 
 =item B<apply_override_method_modifiers>
 
 =back
 
-=head1 BUGS
-
-See L<Moose/BUGS> for details on reporting bugs.
-
 =head1 AUTHORS
 
 =over 4
@@ -1,20 +1,15 @@
 package Moose::Meta::Role::Application::ToClass;
-BEGIN {
-  $Moose::Meta::Role::Application::ToClass::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Role::Application::ToClass::VERSION = '2.1204';
+$Moose::Meta::Role::Application::ToClass::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
 
 use List::MoreUtils 'firstval';
-use Moose::Util  'english_list';
-use Scalar::Util 'weaken', 'blessed';
+use Moose::Util 'throw_exception';
+use Scalar::Util 'weaken';
 
 use parent 'Moose::Meta::Role::Application';
 
-use Moose::Util 'throw_exception';
-
 __PACKAGE__->meta->add_attribute('role' => (
     reader => 'role',
     Class::MOP::_definition_context(),
@@ -41,15 +36,15 @@ sub apply {
 sub check_role_exclusions {
     my ($self, $role, $class) = @_;
     if ($class->excludes_role($role->name)) {
-        throw_exception( ConflictDetectedInCheckRoleExclusionsInToClass => class => $class,
-                                                                           role  => $role
+        throw_exception( ConflictDetectedInCheckRoleExclusionsInToClass => class_name => $class->name,
+                                                                           role_name  => $role->name,
                        );
     }
     foreach my $excluded_role_name ($role->get_excluded_roles_list) {
         if ($class->does_role($excluded_role_name)) {
-            throw_exception( ClassDoesTheExcludedRole => role          => $role,
-                                                         excluded_role => Class::MOP::class_of($excluded_role_name),
-                                                         class         => $class
+            throw_exception( ClassDoesTheExcludedRole => role_name          => $role->name,
+                                                         excluded_role_name => $excluded_role_name,
+                                                         class_name         => $class->name,
                            );
         }
     }
@@ -91,21 +86,21 @@ sub check_required_methods {
 
         my @same_role_conflicts = grep { $_->roles_as_english_list eq $roles } @conflicts;
 
-        throw_exception( MethodNameConflictInRoles => conflict => \@same_role_conflicts,
-                                                      class    => $class
+        throw_exception( MethodNameConflictInRoles => conflict   => \@same_role_conflicts,
+                                                      class_name => $class->name
                        );
     }
     elsif (@missing) {
         if (my $meth = firstval { $class->name->can($_) } @missing) {
-            throw_exception( RequiredMethodsImportedByClass => class           => $class,
-                                                               role            => $role,
+            throw_exception( RequiredMethodsImportedByClass => class_name      => $class->name,
+                                                               role_name       => $role->name,
                                                                missing_methods => \@missing,
                                                                imported_method => $meth
                            );
         }
         else {
-            throw_exception( RequiredMethodsNotImplementedByClass => class           => $class,
-                                                                     role            => $role,
+            throw_exception( RequiredMethodsNotImplementedByClass => class_name      => $class->name,
+                                                                     role_name       => $role->name,
                                                                      missing_methods => \@missing,
                            );
         }
@@ -163,8 +158,8 @@ sub apply_methods {
         if ( $class_method && $class_method->body != $method->body ) {
             throw_exception( CannotCreateMethodAliasLocalMethodIsPresentInClass => aliased_method_name => $aliased_method_name,
                                                                                    method              => $method,
-                                                                                   role                => $role,
-                                                                                   class               => $class
+                                                                                   role_name           => $role->name,
+                                                                                   class_name          => $class->name,
                            );
         }
 
@@ -228,7 +223,7 @@ Moose::Meta::Role::Application::ToClass - Compose a role into a class
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,14 +1,11 @@
 package Moose::Meta::Role::Application::ToInstance;
-BEGIN {
-  $Moose::Meta::Role::Application::ToInstance::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Role::Application::ToInstance::VERSION = '2.1204';
+$Moose::Meta::Role::Application::ToInstance::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
 
 use Scalar::Util 'blessed';
-use List::MoreUtils 'all';
+use List::Util 1.33 'all';
 
 use parent 'Moose::Meta::Role::Application';
 
@@ -18,6 +15,8 @@ __PACKAGE__->meta->add_attribute('rebless_params' => (
     Class::MOP::_definition_context(),
 ));
 
+use constant _NEED_OVERLOAD_HACK_FOR_OBJECTS => $] < 5.008009;
+
 sub apply {
     my ( $self, $role, $object, $args ) = @_;
 
@@ -36,6 +35,15 @@ sub apply {
     );
 
     $class->rebless_instance( $object, %{ $self->rebless_params } );
+
+    if ( _NEED_OVERLOAD_HACK_FOR_OBJECTS
+        && overload::Overloaded( ref $object ) ) {
+
+        # need to use $_[2] here to apply to the object in the caller
+        _reset_amagic($_[2]);
+    }
+
+    return $object;
 }
 
 1;
@@ -54,7 +62,7 @@ Moose::Meta::Role::Application::ToInstance - Compose a role into an instance
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,14 +1,9 @@
 package Moose::Meta::Role::Application::ToRole;
-BEGIN {
-  $Moose::Meta::Role::Application::ToRole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Role::Application::ToRole::VERSION = '2.1204';
+$Moose::Meta::Role::Application::ToRole::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
 
-use Scalar::Util    'blessed';
-
 use parent 'Moose::Meta::Role::Application';
 
 use Moose::Util 'throw_exception';
@@ -22,15 +17,15 @@ sub apply {
 sub check_role_exclusions {
     my ($self, $role1, $role2) = @_;
     if ( $role2->excludes_role($role1->name) ) {
-        throw_exception( ConflictDetectedInCheckRoleExclusions => role          => $role2,
-                                                                  excluded_role => $role1
+        throw_exception( ConflictDetectedInCheckRoleExclusions => role_name          => $role2->name,
+                                                                  excluded_role_name => $role1->name,
                        );
     }
     foreach my $excluded_role_name ($role1->get_excluded_roles_list) {
         if ( $role2->does_role($excluded_role_name) ) {
-            throw_exception( RoleDoesTheExcludedRole => role          => $role2,
-                                                        excluded_role => Class::MOP::class_of($excluded_role_name),
-                                                        second_role   => $role1
+            throw_exception( RoleDoesTheExcludedRole => role_name          => $role2->name,
+                                                        excluded_role_name => $excluded_role_name,
+                                                        second_role_name   => $role1->name,
                            );
         }
         $role2->add_excluded_roles($excluded_role_name);
@@ -63,9 +58,9 @@ sub apply_attributes {
 
             my $role2_name = $role2->name;
 
-            throw_exception( AttributeConflictInRoles => role           => $role1,
-                                                         second_role    => $role2,
-                                                         attribute_name => $attribute_name
+            throw_exception( AttributeConflictInRoles => role_name        => $role1->name,
+                                                         second_role_name => $role2->name,
+                                                         attribute_name   => $attribute_name
                            );
         }
         else {
@@ -111,10 +106,10 @@ sub apply_methods {
         if (   $role2_method
             && $role2_method->body != $method->body ) {
 
-            throw_exception( CannotCreateMethodAliasLocalMethodIsPresent => aliased_method_name => $aliased_method_name,
-                                                                            method              => $method,
-                                                                            role                => $role2,
-                                                                            role_being_applied  => $role1
+            throw_exception( CannotCreateMethodAliasLocalMethodIsPresent => aliased_method_name     => $aliased_method_name,
+                                                                            method                  => $method,
+                                                                            role_name               => $role2->name,
+                                                                            role_being_applied_name => $role1->name,
                            );
         }
 
@@ -139,9 +134,9 @@ sub apply_override_method_modifiers {
             # we have a conflict here, because you cannot
             # combine an overridden method with a locally
             # defined one
-            throw_exception( OverrideConflictInComposition => role               => $role2,
-                                                              role_being_applied => $role1,
-                                                              method_name        => $method_name
+            throw_exception( OverrideConflictInComposition => role_name               => $role2->name,
+                                                              role_being_applied_name => $role1->name,
+                                                              method_name             => $method_name
                            );
         }
         else {
@@ -151,10 +146,10 @@ sub apply_override_method_modifiers {
             if ($role2->has_override_method_modifier($method_name) &&
                 $role1->get_override_method_modifier($method_name) != $role2->get_override_method_modifier($method_name)) {
 
-                throw_exception( OverrideConflictInComposition => role                => $role2,
-                                                                  role_being_applied  => $role1,
-                                                                  method_name         => $method_name,
-                                                                  two_overrides_found => 1
+                throw_exception( OverrideConflictInComposition => role_name               => $role2->name,
+                                                                  role_being_applied_name => $role1->name,
+                                                                  method_name             => $method_name,
+                                                                  two_overrides_found     => 1
                                );
             }
             else {
@@ -181,7 +176,6 @@ sub apply_method_modifiers {
     }
 }
 
-
 1;
 
 # ABSTRACT: Compose a role into another role
@@ -198,7 +192,7 @@ Moose::Meta::Role::Application::ToRole - Compose a role into another role
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,11 +1,11 @@
 package Moose::Meta::Role::Application;
-BEGIN {
-  $Moose::Meta::Role::Application::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Role::Application::VERSION = '2.1204';
+$Moose::Meta::Role::Application::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
+use overload ();
+
+use List::Util 1.33 qw( all );
 
 use Moose::Util 'throw_exception';
 
@@ -54,6 +54,7 @@ sub apply {
     $self->check_required_methods(@_);
     $self->check_required_attributes(@_);
 
+    $self->apply_overloading(@_);
     $self->apply_attributes(@_);
     $self->apply_methods(@_);
 
@@ -77,6 +78,23 @@ sub apply_before_method_modifiers   { (shift)->apply_method_modifiers('before' =
 sub apply_around_method_modifiers   { (shift)->apply_method_modifiers('around' => @_) }
 sub apply_after_method_modifiers    { (shift)->apply_method_modifiers('after'  => @_) }
 
+sub apply_overloading {
+    my ( $self, $role, $other ) = @_;
+
+    return unless $role->is_overloaded;
+
+    unless ( $other->is_overloaded ) {
+        $other->set_overload_fallback_value(
+            $role->get_overload_fallback_value );
+    }
+
+    for my $overload ( $role->get_all_overloaded_operators ) {
+        next if $other->has_overloaded_operator( $overload->operator );
+        $other->add_overloaded_operator(
+            $overload->operator => $overload->clone );
+    }
+}
+
 1;
 
 # ABSTRACT: A base class for role application
@@ -93,7 +111,7 @@ Moose::Meta::Role::Application - A base class for role application
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -132,6 +150,8 @@ consideration, and is intentionally not yet documented.
 
 =item B<apply_methods>
 
+=item B<apply_overloading>
+
 =item B<apply_method_modifiers>
 
 =item B<apply_before_method_modifiers>
@@ -1,12 +1,9 @@
 package Moose::Meta::Role::Attribute;
-BEGIN {
-  $Moose::Meta::Role::Attribute::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Role::Attribute::VERSION = '2.1204';
+$Moose::Meta::Role::Attribute::VERSION = '2.1402';
 use strict;
 use warnings;
 
-use List::MoreUtils 'all';
+use List::Util 1.33 'all';
 use Scalar::Util 'blessed', 'weaken';
 
 use parent 'Moose::Meta::Mixin::AttributeCore', 'Class::MOP::Object';
@@ -142,7 +139,7 @@ Moose::Meta::Role::Attribute - The Moose attribute metaclass for Roles
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,19 +1,12 @@
 package Moose::Meta::Role::Composite;
-BEGIN {
-  $Moose::Meta::Role::Composite::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Role::Composite::VERSION = '2.1204';
+$Moose::Meta::Role::Composite::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
 
 use Scalar::Util 'blessed';
-
-use Moose::Util;
-
-use parent 'Moose::Meta::Role';
-
 use Moose::Util 'throw_exception';
+use parent 'Moose::Meta::Role';
 
 # NOTE:
 # we need to override the ->name
@@ -37,6 +30,17 @@ __PACKAGE__->meta->add_attribute('_methods' => (
     Class::MOP::_definition_context(),
 ));
 
+__PACKAGE__->meta->add_attribute('_overloads' => (
+    reader  => '_overload_map',
+    default => sub { {} },
+    Class::MOP::_definition_context(),
+));
+
+__PACKAGE__->meta->add_attribute('_overload_fallback' => (
+    accessor  => '_overload_fallback',
+    Class::MOP::_definition_context(),
+));
+
 __PACKAGE__->meta->add_attribute(
     'application_role_summation_class',
     reader  => 'application_role_summation_class',
@@ -76,6 +80,12 @@ sub new {
     $class->_new(\%params);
 }
 
+# There's no such thing as an anonymous composite role since composites are an
+# artifact of Moose's internals. However, a composite role that contains an
+# anon role may _look_ like an anon role since $self->name =~ /$anon_key/ can
+# return true if the first role in the composite is anonymous itself.
+sub is_anon { 0 }
+
 # This is largely a copy of what's in Moose::Meta::Role (itself
 # largely a copy of Class::MOP::Class). However, we can't actually
 # call add_package_symbol, because there's no package into which to
@@ -127,6 +137,39 @@ sub get_method {
     return $self->_method_map->{$method_name};
 }
 
+sub is_overloaded {
+    my ($self) = @_;
+    return keys %{ $self->_overload_map };
+}
+
+sub add_overloaded_operator {
+    my ( $self, $op_name, $overload ) = @_;
+
+    unless ( defined $op_name && $op_name ) {
+        throw_exception(
+            'MustDefineAnOverloadOperator',
+            instance => $self,
+        );
+    }
+
+    $self->_overload_map->{$op_name} = $overload;
+}
+
+sub get_overload_fallback_value {
+    my ($self) = @_;
+    return $self->_overload_fallback;
+}
+
+sub set_overload_fallback_value {
+    my $self = shift;
+    $self->_overload_fallback(shift);
+}
+
+sub get_all_overloaded_operators {
+    my ( $self, $method_name ) = @_;
+    return values %{ $self->_overload_map };
+}
+
 sub apply_params {
     my ($self, $role_params) = @_;
     Moose::Util::_load_user_class($self->application_role_summation_class);
@@ -171,7 +214,7 @@ Moose::Meta::Role::Composite - An object to represent the set of roles
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,9 +1,5 @@
-
 package Moose::Meta::Role::Method::Conflicting;
-BEGIN {
-  $Moose::Meta::Role::Method::Conflicting::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Role::Method::Conflicting::VERSION = '2.1204';
+$Moose::Meta::Role::Method::Conflicting::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -38,7 +34,7 @@ Moose::Meta::Role::Method::Conflicting - A Moose metaclass for conflicting metho
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,9 +1,5 @@
-
 package Moose::Meta::Role::Method::Required;
-BEGIN {
-  $Moose::Meta::Role::Method::Required::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Role::Method::Required::VERSION = '2.1204';
+$Moose::Meta::Role::Method::Required::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
@@ -40,7 +36,7 @@ Moose::Meta::Role::Method::Required - A Moose metaclass for required methods in
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,9 +1,5 @@
-
 package Moose::Meta::Role::Method;
-BEGIN {
-  $Moose::Meta::Role::Method::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Role::Method::VERSION = '2.1204';
+$Moose::Meta::Role::Method::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -36,7 +32,7 @@ Moose::Meta::Role::Method - A Moose Method metaclass for Roles
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,14 +1,10 @@
 package Moose::Meta::Role;
-BEGIN {
-  $Moose::Meta::Role::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::Role::VERSION = '2.1204';
+$Moose::Meta::Role::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
 
 use Scalar::Util 'blessed';
-use Devel::GlobalDestruction 'in_global_destruction';
 
 use Moose::Meta::Class;
 use Moose::Meta::Role::Attribute;
@@ -21,7 +17,8 @@ use Class::MOP::MiniTrait;
 
 use parent 'Class::MOP::Module',
          'Class::MOP::Mixin::HasAttributes',
-         'Class::MOP::Mixin::HasMethods';
+         'Class::MOP::Mixin::HasMethods',
+         'Class::MOP::Mixin::HasOverloads';
 
 Class::MOP::MiniTrait::apply(__PACKAGE__, 'Moose::Meta::Object::Trait');
 
@@ -239,13 +236,13 @@ sub add_attribute {
 
     if (blessed $_[0] && ! $_[0]->isa('Moose::Meta::Role::Attribute') ) {
         my $class = ref $_[0];
-        throw_exception( CannotAddAsAnAttributeToARole => role            => $self,
-                                                          attribute_class => $class
+        throw_exception( CannotAddAsAnAttributeToARole => role_name       => $self->name,
+                                                          attribute_class => $class,
                        );
     }
     elsif (!blessed($_[0]) && defined($_[0]) && $_[0] =~ /^\+(.*)/) {
         throw_exception( AttributeExtensionIsNotSupportedInRoles => attribute_name => $_[0],
-                                                                    role           => $self
+                                                                    role_name      => $self->name,
                        );
     }
 
@@ -364,7 +361,7 @@ sub add_override_method_modifier {
     my ($self, $method_name, $method) = @_;
     (!$self->has_method($method_name))
         || throw_exception( CannotOverrideALocalMethod => method_name => $method_name,
-                                                          role        => $self
+                                                          role_name   => $self->name,
                           );
     $self->get_override_method_modifiers_map->{$method_name} = $method;
 }
@@ -405,7 +402,7 @@ sub add_role {
     my ($self, $role) = @_;
     (blessed($role) && $role->isa('Moose::Meta::Role'))
         || throw_exception( AddRoleToARoleTakesAMooseMetaRole => role_to_be_added => $role,
-                                                                 role             => $self
+                                                                 role_name        => $self->name,
                           );
     push @{$self->get_roles} => $role;
     $self->reset_package_cache_flag;
@@ -424,7 +421,7 @@ sub calculate_all_roles {
 sub does_role {
     my ($self, $role) = @_;
     (defined $role)
-        || throw_exception( RoleNameRequiredForMooseMetaRole => role => $self );
+        || throw_exception( RoleNameRequiredForMooseMetaRole => role_name => $self->name );
     my $role_name = blessed $role ? $role->name : $role;
     # if we are it,.. then return true
     return 1 if $role_name eq $self->name;
@@ -445,8 +442,8 @@ sub apply {
     my ($self, $other, %args) = @_;
 
     (blessed($other))
-        || throw_exception( ApplyTakesABlessedInstance => param => $other,
-                                                          role  => $self
+        || throw_exception( ApplyTakesABlessedInstance => param     => $other,
+                                                          role_name => $self->name,
                           );
 
     my $application_class;
@@ -755,7 +752,7 @@ Moose::Meta::Role - The Moose Role metaclass
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -932,10 +929,8 @@ This is quite likely to change in the future.
 
 =head2 Overload introspection and creation
 
-The methods for dealing with a role's overloads are all identical in API
-and behavior to the same methods in L<Class::MOP::Class>. Note that these are
-not particularly useful (yet), because overloads do not participate in role
-composition.
+The methods for dealing with a role's overloads are all identical in API and
+behavior to the same methods in L<Class::MOP::Class>.
 
 =over 4
 
@@ -1,9 +1,5 @@
-
 package Moose::Meta::TypeCoercion::Union;
-BEGIN {
-  $Moose::Meta::TypeCoercion::Union::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::TypeCoercion::Union::VERSION = '2.1204';
+$Moose::Meta::TypeCoercion::Union::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
@@ -20,7 +16,7 @@ sub compile_type_coercion {
 
     (blessed $type_constraint && $type_constraint->isa('Moose::Meta::TypeConstraint::Union'))
      || throw_exception( NeedsTypeConstraintUnionForTypeCoercionUnion => type_coercion_union_object => $self,
-                                                                         type_name                  => $type_constraint
+                                                                         type_name                  => $type_constraint->name
                        );
 
     $self->_compiled_type_coercion(
@@ -61,12 +57,13 @@ Moose::Meta::TypeCoercion::Union - The Moose Type Coercion metaclass for Unions
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
 This is a subclass of L<Moose::Meta::TypeCoercion> that is used for
 L<Moose::Meta::TypeConstraint::Union> objects.
+
 =head1 METHODS
 
 =over 4
@@ -1,9 +1,5 @@
-
 package Moose::Meta::TypeCoercion;
-BEGIN {
-  $Moose::Meta::TypeCoercion::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::TypeCoercion::VERSION = '2.1204';
+$Moose::Meta::TypeCoercion::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
@@ -119,7 +115,7 @@ Moose::Meta::TypeCoercion - The Moose Type Coercion metaclass
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,14 +1,11 @@
 package Moose::Meta::TypeConstraint::Class;
-BEGIN {
-  $Moose::Meta::TypeConstraint::Class::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::TypeConstraint::Class::VERSION = '2.1204';
+$Moose::Meta::TypeConstraint::Class::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
 
 use B;
-use Scalar::Util 'blessed';
+use Scalar::Util ();
 use Moose::Util::TypeConstraints ();
 
 use parent 'Moose::Meta::TypeConstraint';
@@ -146,7 +143,7 @@ Moose::Meta::TypeConstraint::Class - Class/TypeConstraint parallel hierarchy
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,15 +1,12 @@
 package Moose::Meta::TypeConstraint::DuckType;
-BEGIN {
-  $Moose::Meta::TypeConstraint::DuckType::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::TypeConstraint::DuckType::VERSION = '2.1204';
+$Moose::Meta::TypeConstraint::DuckType::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
 
 use B;
 use Scalar::Util 'blessed';
-use List::MoreUtils qw(all);
+use List::Util 1.33 qw(all);
 use Moose::Util 'english_list';
 
 use Moose::Util::TypeConstraints ();
@@ -28,7 +25,7 @@ my $inliner = sub {
     return $self->parent->_inline_check($val)
          . ' && do {' . "\n"
              . 'my $val = ' . $val . ';' . "\n"
-             . '&List::MoreUtils::all(' . "\n"
+             . '&List::Util::all(' . "\n"
                  . 'sub { $val->can($_) },' . "\n"
                  . join(', ', map { B::perlstring($_) } @{ $self->methods })
              . ');' . "\n"
@@ -119,7 +116,7 @@ Moose::Meta::TypeConstraint::DuckType - Type constraint for duck typing
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,8 +1,5 @@
 package Moose::Meta::TypeConstraint::Enum;
-BEGIN {
-  $Moose::Meta::TypeConstraint::Enum::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::TypeConstraint::Enum::VERSION = '2.1204';
+$Moose::Meta::TypeConstraint::Enum::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
@@ -128,7 +125,7 @@ Moose::Meta::TypeConstraint::Enum - Type constraint for enumerated values.
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,8 +1,5 @@
 package Moose::Meta::TypeConstraint::Parameterizable;
-BEGIN {
-  $Moose::Meta::TypeConstraint::Parameterizable::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::TypeConstraint::Parameterizable::VERSION = '2.1204';
+$Moose::Meta::TypeConstraint::Parameterizable::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
@@ -55,9 +52,9 @@ sub _can_coerce_constraint_from {
 sub generate_inline_for {
     my ($self, $type, $val) = @_;
 
-    throw_exception( CannotGenerateInlineConstraint => parameterizable_type_object => $self,
-                                                       type                        => $type,
-                                                       value                       => $val
+    throw_exception( CannotGenerateInlineConstraint => parameterizable_type_object_name => $self->name,
+                                                       type_name                        => $type->name,
+                                                       value                            => $val,
                    )
         unless $self->has_inline_generator;
 
@@ -81,7 +78,7 @@ sub parameterize {
         if($parent->can('type_parameter')) {
             unless ( $contained_tc->is_a_type_of($parent->type_parameter) ) {
                 throw_exception( ParameterIsNotSubtypeOfParent => type_parameter => $type_parameter,
-                                                                  type           => $self
+                                                                  type_name      => $self->name,
                                );
             }
         }
@@ -118,7 +115,7 @@ Moose::Meta::TypeConstraint::Parameterizable - Type constraints which can take a
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,8 +1,5 @@
 package Moose::Meta::TypeConstraint::Parameterized;
-BEGIN {
-  $Moose::Meta::TypeConstraint::Parameterized::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::TypeConstraint::Parameterized::VERSION = '2.1204';
+$Moose::Meta::TypeConstraint::Parameterized::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
@@ -44,13 +41,13 @@ sub compile_type_constraint {
     my $self = shift;
 
     unless ( $self->has_type_parameter ) {
-        throw_exception( CannotCreateHigherOrderTypeWithoutATypeParameter => type => $self );
+        throw_exception( CannotCreateHigherOrderTypeWithoutATypeParameter => type_name => $self->name );
     }
 
     my $type_parameter = $self->type_parameter;
 
     unless ( blessed $type_parameter && $type_parameter->isa('Moose::Meta::TypeConstraint') ) {
-        throw_exception( TypeParameterMustBeMooseMetaType => type => $self );
+        throw_exception( TypeParameterMustBeMooseMetaType => type_name => $self->name );
     }
 
     foreach my $type (Moose::Util::TypeConstraints::get_all_parameterizable_types()) {
@@ -62,7 +59,9 @@ sub compile_type_constraint {
 
     # if we get here, then we couldn't
     # find a way to parameterize this type
-    throw_exception( TypeConstraintCannotBeUsedForAParameterizableType => type => $self );
+    throw_exception( TypeConstraintCannotBeUsedForAParameterizableType => type_name        => $self->name,
+                                                                          parent_type_name => $self->parent->name,
+                   );
 }
 
 sub can_be_inlined {
@@ -116,7 +115,7 @@ Moose::Meta::TypeConstraint::Parameterized - Type constraints with a bound param
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 METHODS
 
@@ -1,9 +1,5 @@
-
 package Moose::Meta::TypeConstraint::Registry;
-BEGIN {
-  $Moose::Meta::TypeConstraint::Registry::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::TypeConstraint::Registry::VERSION = '2.1204';
+$Moose::Meta::TypeConstraint::Registry::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
@@ -81,7 +77,7 @@ Moose::Meta::TypeConstraint::Registry - registry for type constraints
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,15 +1,12 @@
 package Moose::Meta::TypeConstraint::Role;
-BEGIN {
-  $Moose::Meta::TypeConstraint::Role::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::TypeConstraint::Role::VERSION = '2.1204';
+$Moose::Meta::TypeConstraint::Role::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
 
 use B;
-use Scalar::Util 'blessed';
 use Moose::Util::TypeConstraints ();
+use Moose::Util ();
 
 use parent 'Moose::Meta::TypeConstraint';
 
@@ -126,7 +123,7 @@ Moose::Meta::TypeConstraint::Role - Role/TypeConstraint parallel hierarchy
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,17 +1,12 @@
-
 package Moose::Meta::TypeConstraint::Union;
-BEGIN {
-  $Moose::Meta::TypeConstraint::Union::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::TypeConstraint::Union::VERSION = '2.1204';
+$Moose::Meta::TypeConstraint::Union::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
 
 use Moose::Meta::TypeCoercion::Union;
 
-use List::MoreUtils qw(all);
-use List::Util qw(first);
+use List::Util 1.33 qw(first all);
 
 use parent 'Moose::Meta::TypeConstraint';
 
@@ -212,7 +207,7 @@ Moose::Meta::TypeConstraint::Union - A union of Moose type constraints
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,9 +1,5 @@
-
 package Moose::Meta::TypeConstraint;
-BEGIN {
-  $Moose::Meta::TypeConstraint::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Meta::TypeConstraint::VERSION = '2.1204';
+$Moose::Meta::TypeConstraint::VERSION = '2.1402';
 use strict;
 use warnings;
 use metaclass;
@@ -13,9 +9,8 @@ use overload '0+'     => sub { refaddr(shift) }, # id an object
              bool     => sub { 1 },
              fallback => 1;
 
-use Class::Load qw(load_class);
 use Eval::Closure;
-use Scalar::Util qw(blessed refaddr);
+use Scalar::Util qw(refaddr);
 use Sub::Name qw(subname);
 use Try::Tiny;
 
@@ -141,7 +136,7 @@ sub coerce {
     my $coercion = $self->coercion;
 
     unless ($coercion) {
-        throw_exception( CoercingWithoutCoercions => type => $self );
+        throw_exception( CoercingWithoutCoercions => type_name => $self->name );
     }
 
     return $_[0] if $self->check($_[0]);
@@ -189,7 +184,7 @@ sub _inline_check {
     my $self = shift;
 
     unless ( $self->can_be_inlined ) {
-        throw_exception( CannotInlineTypeConstraintCheck => type => $self );
+        throw_exception( CannotInlineTypeConstraintCheck => type_name => $self->name );
     }
 
     if ( $self->has_parent && $self->constraint == $null_constraint ) {
@@ -295,7 +290,7 @@ sub _actually_compile_type_constraint {
 
     my $check = $self->constraint;
     unless ( defined $check ) {
-        throw_exception( NoConstraintCheckForTypeConstraint => type => $self );
+        throw_exception( NoConstraintCheckForTypeConstraint => type_name => $self->name );
     }
 
     return $self->_compile_subtype($check)
@@ -379,7 +374,7 @@ Moose::Meta::TypeConstraint - The Moose Type Constraint metaclass
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,9 +1,5 @@
-
 package Moose::Object;
-BEGIN {
-  $Moose::Object::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Object::VERSION = '2.1204';
+$Moose::Object::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -122,7 +118,7 @@ sub does {
     my $class = Scalar::Util::blessed($self) || $self;
     my $meta = Class::MOP::Class->initialize($class);
     (defined $role_name)
-        || Moose::Util::throw_exception( DoesRequiresRoleName => class => $meta );
+        || Moose::Util::throw_exception( DoesRequiresRoleName => class_name => $meta->name );
     return 1 if $meta->can('does_role') && $meta->does_role($role_name);
     return 0;
 }
@@ -150,7 +146,7 @@ Moose::Object - The base object for Moose
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,12 +1,9 @@
 use strict;
 use warnings;
 package Moose::Role;
-BEGIN {
-  $Moose::Role::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Role::VERSION = '2.1204';
-use Scalar::Util 'blessed';
-use Carp         'croak';
+$Moose::Role::VERSION = '2.1402';
+use Scalar::Util ();
+use Carp ();
 use Class::Load  'is_class_loaded';
 use Module::Runtime 'module_notional_filename';
 
@@ -29,21 +26,21 @@ sub with {
 
 sub requires {
     my $meta = shift;
-    throw_exception( MustSpecifyAtleastOneMethod => role => $meta ) unless @_;
+    throw_exception( MustSpecifyAtleastOneMethod => role_name => $meta->name ) unless @_;
     $meta->add_required_methods(@_);
 }
 
 sub excludes {
     my $meta = shift;
-    throw_exception( MustSpecifyAtleastOneRole => role => $meta ) unless @_;
+    throw_exception( MustSpecifyAtleastOneRole => role_name => $meta->name ) unless @_;
     $meta->add_excluded_roles(@_);
 }
 
 sub has {
     my $meta = shift;
     my $name = shift;
-    throw_exception( InvalidHasProvidedInARole => role            => $meta,
-                                                  attribute_name  => $name
+    throw_exception( InvalidHasProvidedInARole => role_name       => $meta->name,
+                                                  attribute_name  => $name,
                    )
         if @_ == 1;
     my %context = Moose::Util::_caller_info;
@@ -60,7 +57,7 @@ sub _add_method_modifier {
 
     if ( ref($_[0]) eq 'Regexp' ) {
         throw_exception( RolesDoNotSupportRegexReferencesForMethodModifiers => modifier_type => $type,
-                                                                               role          => $meta
+                                                                               role_name     => $meta->name,
                        );
     }
 
@@ -99,8 +96,8 @@ Moose::Exporter->setup_import_methods(
     ],
     as_is => [
         qw( extends super inner augment ),
-        \&Carp::confess,
-        \&Scalar::Util::blessed,
+        'Carp::confess',
+        'Scalar::Util::blessed',
     ],
 );
 
@@ -133,12 +130,10 @@ sub init_meta {
             if ( $meta->isa('Moose::Meta::Class') ) {
                 throw_exception( MetaclassIsAClassNotASubclassOfGivenMetaclass => class_name => $role,
                                                                                   metaclass  => $metaclass,
-                                                                                  class      => $meta
                                );
             } else {
                 throw_exception( MetaclassIsNotASubclassOfGivenMetaclass => class_name => $role,
                                                                             metaclass  => $metaclass,
-                                                                            class      => $meta
                                );
             }
         }
@@ -184,7 +179,7 @@ Moose::Role - The Moose Role
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -276,6 +271,9 @@ this, your class's C<meta> object will have the specified traits
 applied to it. See L<Moose/Metaclass and Trait Name Resolution> for more
 details.
 
+All role metaclasses (note, not the role itself) extend L<Moose::Meta::Role>.
+You can test if a package is a role or not using L<Moose::Util/is_role>.
+
 =head1 APPLYING ROLES
 
 In addition to being applied to a class using the 'with' syntax (see
@@ -1,7 +1,4 @@
-package Moose::Spec::Role;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Spec::Role
 # ABSTRACT: Formal spec for Role behavior
 
 __END__
@@ -16,7 +13,7 @@ Moose::Spec::Role - Formal spec for Role behavior
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,7 +1,4 @@
-package Moose::Unsweetened;
-use strict;
-use warnings;
-
+# PODNAME: Moose::Unsweetened
 # ABSTRACT: Moved to Moose::Manual::Unsweetened, so go read that
 
 __END__
@@ -16,7 +13,7 @@ Moose::Unsweetened - Moved to Moose::Manual::Unsweetened, so go read that
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 DESCRIPTION
 
@@ -1,17 +1,11 @@
 package Moose::Util::MetaRole;
-BEGIN {
-  $Moose::Util::MetaRole::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Util::MetaRole::VERSION = '2.1204';
+$Moose::Util::MetaRole::VERSION = '2.1402';
 use strict;
 use warnings;
 use Scalar::Util 'blessed';
 
-use List::MoreUtils qw( all );
-use List::Util qw( first );
+use List::Util 1.33 qw( first all );
 use Moose::Deprecated;
-use Scalar::Util qw( blessed );
-
 use Moose::Util 'throw_exception';
 
 sub apply_metaroles {
@@ -82,8 +76,8 @@ sub apply_base_class_roles {
     my %args = @_;
 
     my $meta = _metathing_for( $args{for} || $args{for_class} );
-    throw_exception( CannotApplyBaseClassRolesToRole => params => \%args,
-                                                        role   => $meta
+    throw_exception( CannotApplyBaseClassRolesToRole => params    => \%args,
+                                                        role_name => $meta->name,
                    )
         if $meta->isa('Moose::Meta::Role');
 
@@ -133,7 +127,7 @@ Moose::Util::MetaRole - Apply roles to any metaclass, as well as the object base
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,14 +1,11 @@
 package Moose::Util::TypeConstraints::Builtins;
-BEGIN {
-  $Moose::Util::TypeConstraints::Builtins::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Util::TypeConstraints::Builtins::VERSION = '2.1204';
+$Moose::Util::TypeConstraints::Builtins::VERSION = '2.1402';
 use strict;
 use warnings;
 
 use Class::Load qw( is_class_loaded );
-use List::MoreUtils ();
-use Scalar::Util qw( blessed looks_like_number reftype );
+use List::Util 1.33 ();
+use Scalar::Util qw( blessed );
 
 sub type { goto &Moose::Util::TypeConstraints::type }
 sub subtype { goto &Moose::Util::TypeConstraints::subtype }
@@ -225,7 +222,7 @@ sub define_builtins {
                 'do {'
                     . 'my $check = ' . $val . ';'
                     . 'ref($check) eq "ARRAY" '
-                        . '&& &List::MoreUtils::all('
+                        . '&& &List::Util::all('
                             . 'sub { ' . $type_parameter->_inline_check('$_') . ' }, '
                             . '@{$check}'
                         . ')'
@@ -260,7 +257,7 @@ sub define_builtins {
                 'do {'
                     . 'my $check = ' . $val . ';'
                     . 'ref($check) eq "HASH" '
-                        . '&& &List::MoreUtils::all('
+                        . '&& &List::Util::all('
                             . 'sub { ' . $type_parameter->_inline_check('$_') . ' }, '
                             . 'values %{$check}'
                         . ')'
@@ -305,4 +302,3 @@ __END__
 =for pod_coverage_needs_some_pod
 
 =cut
-
@@ -1,11 +1,7 @@
 package Moose::Util::TypeConstraints;
-BEGIN {
-  $Moose::Util::TypeConstraints::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Util::TypeConstraints::VERSION = '2.1204';
+$Moose::Util::TypeConstraints::VERSION = '2.1402';
 use Carp ();
-use List::MoreUtils qw( all any );
-use Scalar::Util qw( blessed reftype );
+use Scalar::Util qw( blessed );
 use Moose::Exporter;
 use Moose::Deprecated;
 
@@ -24,7 +20,6 @@ sub inline_as (&);
 
 ## --------------------------------------------------------
 
-use Moose::Deprecated;
 use Moose::Meta::TypeConstraint;
 use Moose::Meta::TypeConstraint::Union;
 use Moose::Meta::TypeConstraint::Parameterized;
@@ -160,7 +155,7 @@ sub create_class_type_constraint {
     if (my $type = $REGISTRY->get_type_constraint($class)) {
         if (!($type->isa('Moose::Meta::TypeConstraint::Class') && $type->class eq $class)) {
             throw_exception( TypeConstraintIsAlreadyCreated => package_defined_in => $pkg_defined_in,
-                                                               type               => $type
+                                                               type_name          => $type->name,
                            );
         }
         else {
@@ -193,7 +188,7 @@ sub create_role_type_constraint {
 
     if (my $type = $REGISTRY->get_type_constraint($role)) {
         if (!($type->isa('Moose::Meta::TypeConstraint::Role') && $type->role eq $role)) {
-            throw_exception( TypeConstraintIsAlreadyCreated => type               => $type,
+            throw_exception( TypeConstraintIsAlreadyCreated => type_name          => $type->name,
                                                                package_defined_in => $pkg_defined_in
                            );
         }
@@ -515,9 +510,9 @@ sub match_on_type {
         }
 
         (ref $action eq 'CODE')
-            || throw_exception( MatchActionMustBeACodeRef => type     => $type,
-                                                             action   => $action,
-                                                             to_match => $to_match
+            || throw_exception( MatchActionMustBeACodeRef => type_name => $type->name,
+                                                             action    => $action,
+                                                             to_match  => $to_match
                               );
 
         if ($type->check($to_match)) {
@@ -554,7 +549,7 @@ sub _create_type_constraint ($$$;$) {
 
         ( $type->_package_defined_in eq $pkg_defined_in )
             || throw_exception( TypeConstraintIsAlreadyCreated => package_defined_in => $pkg_defined_in,
-                                                                  type               => $type
+                                                                  type_name          => $type->name,
                               )
             if defined $type;
 
@@ -774,7 +769,7 @@ Moose::Util::TypeConstraints - Type constraint system for Moose
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,8 +1,5 @@
 package Moose::Util;
-BEGIN {
-  $Moose::Util::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::Util::VERSION = '2.1204';
+$Moose::Util::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -11,14 +8,14 @@ use Data::OptList;
 use Params::Util qw( _STRING );
 use Sub::Exporter;
 use Scalar::Util 'blessed';
-use List::Util qw(first);
-use List::MoreUtils qw(any all);
+use List::Util 1.33 qw(first any all);
 use overload ();
 use Try::Tiny;
 
 
 my @exports = qw[
     find_meta
+    is_role
     does_role
     search_class_by_role
     ensure_all_roles
@@ -57,6 +54,14 @@ sub find_meta { Class::MOP::class_of(@_) }
 
 ## the functions ...
 
+sub is_role {
+    my $package_or_obj = shift;
+
+    my $meta = find_meta($package_or_obj);
+    return if not $meta;
+    return $meta->isa('Moose::Meta::Role');
+}
+
 sub does_role {
     my ($class_or_obj, $role) = @_;
 
@@ -535,7 +540,7 @@ Moose::Util - Utilities for working with Moose classes
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -566,6 +571,10 @@ This method takes a class name or object and attempts to find a
 metaclass for the class, if one exists. It will B<not> create one if it
 does not yet exist.
 
+=item B<is_role($package_or_obj)>
+
+Returns true if the provided package name or object is a L<Moose::Role>.
+
 =item B<does_role($class_or_obj, $role_or_obj)>
 
 Returns true if C<$class_or_obj> does the given C<$role_or_obj>. The role can
@@ -1,16 +1,15 @@
 use strict;
 use warnings;
 package Moose;
-BEGIN {
-  $Moose::AUTHORITY = 'cpan:STEVAN';
-}
-$Moose::VERSION = '2.1204';
+$Moose::VERSION = '2.1402';
+$Moose::AUTHORITY = 'cpan:STEVAN';
+
 use 5.008003;
 
-use Scalar::Util 'blessed';
-use Carp         'carp', 'confess';
+use Scalar::Util ();
+use Carp         'carp';
 use Module::Runtime 'module_notional_filename';
-use Class::Load  'is_class_loaded', 'load_class';
+use Class::Load  'is_class_loaded';
 
 use Moose::Deprecated;
 use Moose::Exporter;
@@ -48,7 +47,7 @@ sub extends {
 
     unless ( @_ )
     {
-        throw_exception( ExtendsMissingArgs => class => $meta );
+        throw_exception( ExtendsMissingArgs => class_name => $meta->name );
     }
     # this checks the metaclass to make sure
     # it is correct, sometimes it can get out
@@ -136,8 +135,8 @@ Moose::Exporter->setup_import_methods(
     ],
     as_is => [
         qw( super inner ),
-        \&Carp::confess,
-        \&Scalar::Util::blessed,
+        'Carp::confess',
+        'Scalar::Util::blessed',
     ],
 );
 
@@ -301,7 +300,7 @@ Moose - A postmodern object system for Perl 5
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -915,11 +914,11 @@ respectively.
 
 Metaclass compatibility is a thorny subject. You should start by
 reading the "About Metaclass compatibility" section in the
-C<Class::MOP> docs.
+L<Class::MOP> docs.
 
 Moose will attempt to resolve a few cases of metaclass incompatibility
 when you set the superclasses for a class, in addition to the cases that
-C<Class::MOP> handles.
+L<Class::MOP> handles.
 
 Moose tries to determine if the metaclasses only "differ by roles". This
 means that the parent and child's metaclass share a common ancestor in
@@ -997,6 +996,8 @@ are a few of our favorites. Feel free to contribute more!
 
 =item * Moo, Only Overengineered, Slow, and Execrable (blame rjbs!)
 
+=item * Massive Object-Oriented Stacktrace Emitter
+
 =back
 
 =head1 ACKNOWLEDGEMENTS
@@ -1,15 +1,12 @@
 package Test::Moose;
-BEGIN {
-  $Test::Moose::AUTHORITY = 'cpan:STEVAN';
-}
-$Test::Moose::VERSION = '2.1204';
+$Test::Moose::VERSION = '2.1402';
 use strict;
 use warnings;
 
 use Sub::Exporter;
 use Test::Builder;
 
-use List::MoreUtils 'all';
+use List::Util 1.33 'all';
 use Moose::Util 'does_role', 'find_meta';
 
 my @exports = qw[
@@ -74,16 +71,13 @@ sub has_attribute_ok ($$;$) {
 sub with_immutable (&@) {
     my $block = shift;
     my $before = $Test->current_test;
-    my $passing_before = (Test::Builder->VERSION < 1.005 ? 0 : $Test->history->pass_count) || 0;
 
     $block->(0);
     Class::MOP::class_of($_)->make_immutable for @_;
     $block->(1);
 
     my $num_tests = $Test->current_test - $before;
-    my $all_passed = Test::Builder->VERSION < 1.005
-        ? all { $_ } ($Test->summary)[-$num_tests..-1]
-        : $num_tests == $Test->history->pass_count - $passing_before;
+    my $all_passed = all { $_ } ($Test->summary)[-$num_tests..-1];
     return $all_passed;
 }
 
@@ -103,7 +97,7 @@ Test::Moose - Test functions for Moose specific features
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,21 +1,11 @@
-
 package metaclass;
-BEGIN {
-  $metaclass::AUTHORITY = 'cpan:STEVAN';
-}
-$metaclass::VERSION = '2.1204';
+$metaclass::VERSION = '2.1402';
 use strict;
 use warnings;
 
-use Module::Runtime 'use_package_optimistically';
-use Class::Load  'load_class';
-use Scalar::Util 'blessed';
-use Try::Tiny;
-
+use Module::Runtime 'use_package_optimistically', 'use_module';
 use Class::MOP;
 
-use Moose::Util 'throw_exception';
-
 sub import {
     my ( $class, @args ) = @_;
 
@@ -32,7 +22,7 @@ sub import {
     }
 
     ($metaclass->isa('Class::MOP::Class'))
-        || throw_exception( MetaclassMustBeDerivedFromClassMOPClass => class_name => $metaclass );
+        || die use_module('Moose::Exception::MetaclassMustBeDerivedFromClassMOPClass')->new( class_name => $metaclass );
 
     # make sure the custom metaclasses get loaded
     foreach my $key (grep { /_(?:meta)?class$/ } keys %options) {
@@ -65,7 +55,7 @@ metaclass - a pragma for installing and using Class::MOP metaclasses
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,8 +1,5 @@
 package oose;
-BEGIN {
-  $oose::AUTHORITY = 'cpan:STEVAN';
-}
-$oose::VERSION = '2.1204';
+$oose::VERSION = '2.1402';
 use strict;
 use warnings;
 
@@ -36,7 +33,7 @@ oose - syntactic sugar to make Moose one-liners easier
 
 =head1 VERSION
 
-version 2.1204
+version 2.1402
 
 =head1 SYNOPSIS
 
@@ -1,9 +0,0 @@
-
-- add delegations for 'get', 'set' in all native attr traits.
-e.g. bool has no 'get'.
-
-
-- more native attr handlers:
-    is_member -- pass in an equality sub that compares $_[0] and $_[1]
-    first_index
-    any, all, non, notall, true, false etc.
@@ -0,0 +1,200 @@
+do { my $x = {
+       'configure' => {
+                        'requires' => {
+                                        'Dist::CheckConflicts' => '0.02',
+                                        'ExtUtils::CBuilder' => '0.27',
+                                        'ExtUtils::MakeMaker' => '0',
+                                        'File::Spec' => '0'
+                                      }
+                      },
+       'develop' => {
+                      'requires' => {
+                                      'Algorithm::C3' => '0',
+                                      'Class::Load' => '0.07',
+                                      'DBM::Deep' => '1.003',
+                                      'Data::Visitor' => '0',
+                                      'DateTime' => '0',
+                                      'DateTime::Calendar::Mayan' => '0',
+                                      'DateTime::Format::MySQL' => '0',
+                                      'Declare::Constraints::Simple' => '0',
+                                      'ExtUtils::MakeMaker::Dist::Zilla::Develop' => '0',
+                                      'File::Find::Rule' => '0',
+                                      'File::Spec' => '0',
+                                      'HTTP::Headers' => '0',
+                                      'IO::File' => '0',
+                                      'IO::Handle' => '0',
+                                      'IO::String' => '0',
+                                      'IPC::Open3' => '0',
+                                      'Locale::US' => '0',
+                                      'Module::CPANTS::Analyse' => '0.92',
+                                      'Module::Refresh' => '0',
+                                      'MooseX::MarkAsMethods' => '0',
+                                      'MooseX::NonMoose' => '0',
+                                      'PadWalker' => '0',
+                                      'Params::Coerce' => '0',
+                                      'Regexp::Common' => '0',
+                                      'SUPER' => '1.10',
+                                      'Specio' => '0.10',
+                                      'Test::CPAN::Changes' => '0.19',
+                                      'Test::CPAN::Meta' => '0',
+                                      'Test::Deep' => '0',
+                                      'Test::EOL' => '0',
+                                      'Test::Inline' => '0',
+                                      'Test::Kwalitee' => '1.21',
+                                      'Test::LeakTrace' => '0',
+                                      'Test::Memory::Cycle' => '0',
+                                      'Test::More' => '0.94',
+                                      'Test::NoTabs' => '0',
+                                      'Test::Output' => '0',
+                                      'Test::Pod' => '1.41',
+                                      'Test::Pod::Coverage' => '1.04',
+                                      'Test::Spelling' => '0',
+                                      'URI' => '0',
+                                      'blib' => '0'
+                                    },
+                      'suggests' => {
+                                      'CPAN::Meta::Requirements' => '0',
+                                      'Carp' => '1.22',
+                                      'Class::Load' => '0.09',
+                                      'Class::Load::XS' => '0.01',
+                                      'Data::OptList' => '0.107',
+                                      'Devel::GlobalDestruction' => '0',
+                                      'Devel::OverloadInfo' => '0.002',
+                                      'Devel::StackTrace' => '1.33',
+                                      'Dist::Zilla' => '5',
+                                      'Dist::Zilla::Plugin::CheckChangesHasContent' => '0',
+                                      'Dist::Zilla::Plugin::CheckVersionIncrement' => '0',
+                                      'Dist::Zilla::Plugin::ConfirmRelease' => '0',
+                                      'Dist::Zilla::Plugin::Conflicts' => '0.16',
+                                      'Dist::Zilla::Plugin::EnsurePrereqsInstalled' => '0.003',
+                                      'Dist::Zilla::Plugin::ExecDir' => '0',
+                                      'Dist::Zilla::Plugin::FileFinder::ByName' => '0',
+                                      'Dist::Zilla::Plugin::FileFinder::Filter' => '0',
+                                      'Dist::Zilla::Plugin::GatherDir' => '5.021',
+                                      'Dist::Zilla::Plugin::Git::Check' => '0',
+                                      'Dist::Zilla::Plugin::Git::CheckFor::CorrectBranch' => '0',
+                                      'Dist::Zilla::Plugin::Git::Commit' => '0',
+                                      'Dist::Zilla::Plugin::Git::Contributors' => '0',
+                                      'Dist::Zilla::Plugin::Git::Push' => '0',
+                                      'Dist::Zilla::Plugin::Git::Remote::Check' => '0',
+                                      'Dist::Zilla::Plugin::Git::Tag' => '0',
+                                      'Dist::Zilla::Plugin::License' => '0',
+                                      'Dist::Zilla::Plugin::MakeMaker::Awesome' => '0',
+                                      'Dist::Zilla::Plugin::Manifest' => '0',
+                                      'Dist::Zilla::Plugin::MetaConfig' => '0',
+                                      'Dist::Zilla::Plugin::MetaJSON' => '0',
+                                      'Dist::Zilla::Plugin::MetaNoIndex' => '0',
+                                      'Dist::Zilla::Plugin::MetaProvides::Package' => '1.15000002',
+                                      'Dist::Zilla::Plugin::MetaResources' => '0',
+                                      'Dist::Zilla::Plugin::MetaTests' => '0',
+                                      'Dist::Zilla::Plugin::MetaYAML' => '0',
+                                      'Dist::Zilla::Plugin::MojibakeTests' => '0',
+                                      'Dist::Zilla::Plugin::NextRelease' => '0',
+                                      'Dist::Zilla::Plugin::PkgVersion' => '5.010',
+                                      'Dist::Zilla::Plugin::PodSyntaxTests' => '0',
+                                      'Dist::Zilla::Plugin::PodWeaver' => '4.004',
+                                      'Dist::Zilla::Plugin::Prereqs' => '0',
+                                      'Dist::Zilla::Plugin::Prereqs::AuthorDeps' => '0',
+                                      'Dist::Zilla::Plugin::PromptIfStale' => '0',
+                                      'Dist::Zilla::Plugin::PruneCruft' => '0',
+                                      'Dist::Zilla::Plugin::Run::AfterRelease' => '0',
+                                      'Dist::Zilla::Plugin::RunExtraTests' => '0',
+                                      'Dist::Zilla::Plugin::ShareDir' => '0',
+                                      'Dist::Zilla::Plugin::SurgicalPodWeaver' => '0',
+                                      'Dist::Zilla::Plugin::Test::CPAN::Changes' => '0',
+                                      'Dist::Zilla::Plugin::Test::CheckBreaks' => '0',
+                                      'Dist::Zilla::Plugin::Test::Compile' => '2.037',
+                                      'Dist::Zilla::Plugin::Test::EOL' => '0.14',
+                                      'Dist::Zilla::Plugin::Test::Kwalitee' => '0',
+                                      'Dist::Zilla::Plugin::Test::NoTabs' => '0',
+                                      'Dist::Zilla::Plugin::Test::ReportPrereqs' => '0',
+                                      'Dist::Zilla::Plugin::TestRelease' => '0',
+                                      'Dist::Zilla::Plugin::UploadToCPAN' => '0',
+                                      'Dist::Zilla::Util::AuthorDeps' => '5.021',
+                                      'Eval::Closure' => '0.04',
+                                      'ExtUtils::CBuilder' => '0.27',
+                                      'File::Find::Rule' => '0',
+                                      'File::Spec' => '0',
+                                      'File::pushd' => '0',
+                                      'IPC::System::Simple' => '0',
+                                      'List::MoreUtils' => '0.28',
+                                      'List::Util' => '1.33',
+                                      'MRO::Compat' => '0.05',
+                                      'Module::Runtime' => '0.014',
+                                      'Module::Runtime::Conflicts' => '0',
+                                      'Package::DeprecationManager' => '0.11',
+                                      'Package::Stash' => '0.32',
+                                      'Package::Stash::XS' => '0.24',
+                                      'Params::Util' => '1.00',
+                                      'Path::Tiny' => '0',
+                                      'Pod::Elemental::PerlMunger' => '0.200001',
+                                      'Scalar::Util' => '1.19',
+                                      'Sub::Exporter' => '0.980',
+                                      'Sub::Name' => '0.05',
+                                      'Task::Weaken' => '0',
+                                      'Test::Deep' => '0',
+                                      'Test::Inline' => '0',
+                                      'Test::Inline::Extract' => '0',
+                                      'Try::Tiny' => '0.02',
+                                      'inc::CheckAuthorDeps' => '0',
+                                      'inc::CheckReleaseType' => '0',
+                                      'inc::SimpleAuthority' => '0',
+                                      'parent' => '0.223',
+                                      'perl' => 'v5.8.3',
+                                      'strict' => '1.03',
+                                      'warnings' => '1.03'
+                                    }
+                    },
+       'runtime' => {
+                      'recommends' => {
+                                        'Devel::PartialDump' => '0.14'
+                                      },
+                      'requires' => {
+                                      'Carp' => '1.22',
+                                      'Class::Load' => '0.09',
+                                      'Class::Load::XS' => '0.01',
+                                      'Data::OptList' => '0.107',
+                                      'Devel::GlobalDestruction' => '0',
+                                      'Devel::OverloadInfo' => '0.002',
+                                      'Devel::StackTrace' => '1.33',
+                                      'Dist::CheckConflicts' => '0.02',
+                                      'Eval::Closure' => '0.04',
+                                      'List::MoreUtils' => '0.28',
+                                      'List::Util' => '1.33',
+                                      'MRO::Compat' => '0.05',
+                                      'Module::Runtime' => '0.014',
+                                      'Module::Runtime::Conflicts' => '0',
+                                      'Package::DeprecationManager' => '0.11',
+                                      'Package::Stash' => '0.32',
+                                      'Package::Stash::XS' => '0.24',
+                                      'Params::Util' => '1.00',
+                                      'Scalar::Util' => '1.19',
+                                      'Sub::Exporter' => '0.980',
+                                      'Sub::Name' => '0.05',
+                                      'Task::Weaken' => '0',
+                                      'Try::Tiny' => '0.02',
+                                      'parent' => '0.223',
+                                      'perl' => 'v5.8.3',
+                                      'strict' => '1.03',
+                                      'warnings' => '1.03'
+                                    }
+                    },
+       'test' => {
+                   'recommends' => {
+                                     'CPAN::Meta' => '2.120900'
+                                   },
+                   'requires' => {
+                                   'CPAN::Meta::Check' => '0.007',
+                                   'CPAN::Meta::Requirements' => '0',
+                                   'ExtUtils::MakeMaker' => '0',
+                                   'File::Spec' => '0',
+                                   'Test::CleanNamespaces' => '0.13',
+                                   'Test::Fatal' => '0.001',
+                                   'Test::More' => '0.88',
+                                   'Test::Requires' => '0.05',
+                                   'Test::Warnings' => '0.016'
+                                 }
+                 }
+     };
+  $x;
+ }
\ No newline at end of file
@@ -3,282 +3,192 @@
 use strict;
 use warnings;
 
-# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.013
+# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.019
 
 use Test::More tests => 1;
 
 use ExtUtils::MakeMaker;
-use File::Spec::Functions;
-use List::Util qw/max/;
-use version;
+use File::Spec;
+
+# from $version::LAX
+my $lax_version_re =
+    qr/(?: undef | (?: (?:[0-9]+) (?: \. | (?:\.[0-9]+) (?:_[0-9]+)? )?
+            |
+            (?:\.[0-9]+) (?:_[0-9]+)?
+        ) | (?:
+            v (?:[0-9]+) (?: (?:\.[0-9]+)+ (?:_[0-9]+)? )?
+            |
+            (?:[0-9]+)? (?:\.[0-9]+){2,} (?:_[0-9]+)?
+        )
+    )/x;
 
 # hide optional CPAN::Meta modules from prereq scanner
 # and check if they are available
 my $cpan_meta = "CPAN::Meta";
-my $cpan_meta_req = "CPAN::Meta::Requirements";
-my $HAS_CPAN_META = eval "require $cpan_meta"; ## no critic
-my $HAS_CPAN_META_REQ = eval "require $cpan_meta_req; $cpan_meta_req->VERSION('2.120900')";
+my $cpan_meta_pre = "CPAN::Meta::Prereqs";
+my $HAS_CPAN_META = eval "require $cpan_meta; $cpan_meta->VERSION('2.120900')" && eval "require $cpan_meta_pre"; ## no critic
 
 # Verify requirements?
 my $DO_VERIFY_PREREQS = 1;
 
-sub _merge_requires {
+sub _max {
+    my $max = shift;
+    $max = ( $_ > $max ) ? $_ : $max for @_;
+    return $max;
+}
+
+sub _merge_prereqs {
     my ($collector, $prereqs) = @_;
-    for my $phase ( qw/configure build test runtime develop/ ) {
-        next unless exists $prereqs->{$phase};
-        if ( my $req = $prereqs->{$phase}{'requires'} ) {
-            my $cmr = CPAN::Meta::Requirements->from_string_hash( $req );
-            $collector->add_requirements( $cmr );
+
+    # CPAN::Meta::Prereqs object
+    if (ref $collector eq $cpan_meta_pre) {
+        return $collector->with_merged_prereqs(
+            CPAN::Meta::Prereqs->new( $prereqs )
+        );
+    }
+
+    # Raw hashrefs
+    for my $phase ( keys %$prereqs ) {
+        for my $type ( keys %{ $prereqs->{$phase} } ) {
+            for my $module ( keys %{ $prereqs->{$phase}{$type} } ) {
+                $collector->{$phase}{$type}{$module} = $prereqs->{$phase}{$type}{$module};
+            }
         }
     }
-}
 
-my %include = map {; $_ => 1 } qw(
+    return $collector;
+}
 
+my @include = qw(
+  Dist::CheckConflicts
+  MooseX::NonMoose
+  Algorithm::C3
+  DateTime
+  DateTime::Calendar::Mayan
+  DateTime::Format::MySQL
+  Declare::Constraints::Simple
+  DBM::Deep
+  HTTP::Headers
+  IO::File
+  IO::String
+  Locale::US
+  Module::Refresh
+  Params::Coerce
+  Regexp::Common
+  SUPER
+  Test::Deep
+  Test::DependentModules
+  Test::LeakTrace
+  Test::Output
+  URI
 );
 
-my %exclude = map {; $_ => 1 } qw(
+my @exclude = qw(
 
 );
 
 # Add static prereqs to the included modules list
-my $static_prereqs = do { my $x = {
-       'configure' => {
-                        'requires' => {
-                                        'Dist::CheckConflicts' => '0.02',
-                                        'ExtUtils::CBuilder' => '0.27',
-                                        'ExtUtils::MakeMaker' => '6.30',
-                                        'File::Spec' => '0'
-                                      }
-                      },
-       'develop' => {
-                      'conflicts' => {
-                                       'Dist::Zilla::Plugin::Conflicts' => '== 0.11'
-                                     },
-                      'requires' => {
-                                      'Algorithm::C3' => '0',
-                                      'CPAN::Meta::Requirements' => '0',
-                                      'Class::Load' => '0.07',
-                                      'DBM::Deep' => '0',
-                                      'Data::Visitor' => '0',
-                                      'DateTime' => '0',
-                                      'DateTime::Calendar::Mayan' => '0',
-                                      'DateTime::Format::MySQL' => '0',
-                                      'Declare::Constraints::Simple' => '0',
-                                      'Dist::Zilla' => '5.012',
-                                      'Dist::Zilla::Plugin::Authority' => '0',
-                                      'Dist::Zilla::Plugin::CheckChangesHasContent' => '0',
-                                      'Dist::Zilla::Plugin::ConfirmRelease' => '0',
-                                      'Dist::Zilla::Plugin::Conflicts' => '0',
-                                      'Dist::Zilla::Plugin::ContributorsFromGit' => '0',
-                                      'Dist::Zilla::Plugin::EOLTests' => '0',
-                                      'Dist::Zilla::Plugin::ExecDir' => '0',
-                                      'Dist::Zilla::Plugin::GatherDir' => '0',
-                                      'Dist::Zilla::Plugin::Git::Check' => '0',
-                                      'Dist::Zilla::Plugin::Git::CheckFor::CorrectBranch' => '0',
-                                      'Dist::Zilla::Plugin::Git::Commit' => '0',
-                                      'Dist::Zilla::Plugin::Git::Push' => '0',
-                                      'Dist::Zilla::Plugin::Git::Remote::Check' => '0',
-                                      'Dist::Zilla::Plugin::Git::Tag' => '0',
-                                      'Dist::Zilla::Plugin::License' => '0',
-                                      'Dist::Zilla::Plugin::MakeMaker::Awesome' => '0',
-                                      'Dist::Zilla::Plugin::Manifest' => '0',
-                                      'Dist::Zilla::Plugin::ManifestSkip' => '0',
-                                      'Dist::Zilla::Plugin::MetaConfig' => '0',
-                                      'Dist::Zilla::Plugin::MetaJSON' => '0',
-                                      'Dist::Zilla::Plugin::MetaNoIndex' => '0',
-                                      'Dist::Zilla::Plugin::MetaProvides::Package' => '1.15000002',
-                                      'Dist::Zilla::Plugin::MetaResources' => '0',
-                                      'Dist::Zilla::Plugin::MetaTests' => '0',
-                                      'Dist::Zilla::Plugin::MetaYAML' => '0',
-                                      'Dist::Zilla::Plugin::MojibakeTests' => '0',
-                                      'Dist::Zilla::Plugin::NextRelease' => '0',
-                                      'Dist::Zilla::Plugin::PkgVersion' => '0',
-                                      'Dist::Zilla::Plugin::PodSyntaxTests' => '0',
-                                      'Dist::Zilla::Plugin::PodWeaver' => '4.004',
-                                      'Dist::Zilla::Plugin::Prereqs' => '0',
-                                      'Dist::Zilla::Plugin::Prereqs::AuthorDeps' => '0',
-                                      'Dist::Zilla::Plugin::PromptIfStale' => '0',
-                                      'Dist::Zilla::Plugin::PruneCruft' => '0',
-                                      'Dist::Zilla::Plugin::PruneFiles' => '0',
-                                      'Dist::Zilla::Plugin::RunExtraTests' => '0',
-                                      'Dist::Zilla::Plugin::ShareDir' => '0',
-                                      'Dist::Zilla::Plugin::SurgicalPodWeaver' => '0',
-                                      'Dist::Zilla::Plugin::Test::CPAN::Changes' => '0',
-                                      'Dist::Zilla::Plugin::Test::Compile' => '2.037',
-                                      'Dist::Zilla::Plugin::Test::Kwalitee' => '0',
-                                      'Dist::Zilla::Plugin::Test::NoTabs' => '0',
-                                      'Dist::Zilla::Plugin::Test::ReportPrereqs' => '0',
-                                      'Dist::Zilla::Plugin::TestRelease' => '0',
-                                      'Dist::Zilla::Plugin::UploadToCPAN' => '0',
-                                      'ExtUtils::MakeMaker::Dist::Zilla::Develop' => '0',
-                                      'File::Find::Rule' => '0',
-                                      'File::Spec' => '0',
-                                      'File::pushd' => '0',
-                                      'HTTP::Headers' => '0',
-                                      'IO::File' => '0',
-                                      'IO::Handle' => '0',
-                                      'IO::String' => '0',
-                                      'IPC::Open3' => '0',
-                                      'IPC::System::Simple' => '0',
-                                      'Locale::US' => '0',
-                                      'Module::CPANTS::Analyse' => '0.92',
-                                      'Module::Info' => '0',
-                                      'Module::Refresh' => '0',
-                                      'MooseX::NonMoose' => '0',
-                                      'PadWalker' => '0',
-                                      'Params::Coerce' => '0',
-                                      'Path::Tiny' => '0',
-                                      'Pod::Elemental::PerlMunger' => '0.200001',
-                                      'Regexp::Common' => '0',
-                                      'SUPER' => '0',
-                                      'Specio' => '0.07',
-                                      'Test::CPAN::Changes' => '0.19',
-                                      'Test::CPAN::Meta' => '0',
-                                      'Test::Deep' => '0',
-                                      'Test::DependentModules' => '0.13',
-                                      'Test::Inline' => '0',
-                                      'Test::Inline::Extract' => '0',
-                                      'Test::Kwalitee' => '1.15',
-                                      'Test::LeakTrace' => '0',
-                                      'Test::Memory::Cycle' => '0',
-                                      'Test::More' => '0.94',
-                                      'Test::NoTabs' => '0',
-                                      'Test::Output' => '0',
-                                      'Test::Pod' => '1.41',
-                                      'Test::Spelling' => '0',
-                                      'URI' => '0',
-                                      'blib' => '0'
-                                    }
-                    },
-       'runtime' => {
-                      'recommends' => {
-                                        'Devel::PartialDump' => '0.14'
-                                      },
-                      'requires' => {
-                                      'Carp' => '1.22',
-                                      'Class::Load' => '0.09',
-                                      'Class::Load::XS' => '0.01',
-                                      'Data::OptList' => '0.107',
-                                      'Devel::GlobalDestruction' => '0',
-                                      'Devel::StackTrace' => '1.30',
-                                      'Dist::CheckConflicts' => '0.02',
-                                      'Eval::Closure' => '0.04',
-                                      'List::MoreUtils' => '0.28',
-                                      'MRO::Compat' => '0.05',
-                                      'Module::Runtime' => '0.014',
-                                      'Package::DeprecationManager' => '0.11',
-                                      'Package::Stash' => '0.32',
-                                      'Package::Stash::XS' => '0.24',
-                                      'Params::Util' => '1.00',
-                                      'Scalar::Util' => '1.19',
-                                      'Sub::Exporter' => '0.980',
-                                      'Sub::Name' => '0.05',
-                                      'Task::Weaken' => '0',
-                                      'Try::Tiny' => '0.02',
-                                      'parent' => '0.223',
-                                      'perl' => 'v5.8.3'
-                                    }
-                    },
-       'test' => {
-                   'recommends' => {
-                                     'CPAN::Meta' => '0',
-                                     'CPAN::Meta::Requirements' => '2.120900'
-                                   },
-                   'requires' => {
-                                   'Test::Fatal' => '0.001',
-                                   'Test::More' => '0.88',
-                                   'Test::Requires' => '0.05'
-                                 }
-                 }
-     };
-  $x;
- };
-
-delete $static_prereqs->{develop} if not $ENV{AUTHOR_TESTING};
-$include{$_} = 1 for map { keys %$_ } map { values %$_ } values %$static_prereqs;
-
-# Merge requirements for major phases (if we can)
-my $all_requires;
-if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META_REQ ) {
-    $all_requires = $cpan_meta_req->new;
-    _merge_requires($all_requires, $static_prereqs);
-}
+my $static_prereqs = do 't/00-report-prereqs.dd';
 
+# Merge all prereqs (either with ::Prereqs or a hashref)
+my $full_prereqs = _merge_prereqs(
+    ( $HAS_CPAN_META ? $cpan_meta_pre->new : {} ),
+    $static_prereqs
+);
 
 # Add dynamic prereqs to the included modules list (if we can)
 my ($source) = grep { -f } 'MYMETA.json', 'MYMETA.yml';
 if ( $source && $HAS_CPAN_META ) {
-  if ( my $meta = eval { CPAN::Meta->load_file($source) } ) {
-    my $dynamic_prereqs = $meta->prereqs;
-    delete $dynamic_prereqs->{develop} if not $ENV{AUTHOR_TESTING};
-    $include{$_} = 1 for map { keys %$_ } map { values %$_ } values %$dynamic_prereqs;
-
-    if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META_REQ ) {
-        _merge_requires($all_requires, $dynamic_prereqs);
+    if ( my $meta = eval { CPAN::Meta->load_file($source) } ) {
+        $full_prereqs = _merge_prereqs($full_prereqs, $meta->prereqs);
     }
-  }
 }
 else {
-  $source = 'static metadata';
+    $source = 'static metadata';
 }
 
-my @modules = sort grep { ! $exclude{$_} } keys %include;
-my @reports = [qw/Version Module/];
+my @full_reports;
 my @dep_errors;
-my $req_hash = defined($all_requires) ? $all_requires->as_string_hash : {};
-
-for my $mod ( @modules ) {
-  next if $mod eq 'perl';
-  my $file = $mod;
-  $file =~ s{::}{/}g;
-  $file .= ".pm";
-  my ($prefix) = grep { -e catfile($_, $file) } @INC;
-  if ( $prefix ) {
-    my $ver = MM->parse_version( catfile($prefix, $file) );
-    $ver = "undef" unless defined $ver; # Newer MM should do this anyway
-    push @reports, [$ver, $mod];
-
-    if ( $DO_VERIFY_PREREQS && $all_requires ) {
-      my $req = $req_hash->{$mod};
-      if ( defined $req && length $req ) {
-        if ( ! defined eval { version->parse($ver) } ) {
-          push @dep_errors, "$mod version '$ver' cannot be parsed (version '$req' required)";
-        }
-        elsif ( ! $all_requires->accepts_module( $mod => $ver ) ) {
-          push @dep_errors, "$mod version '$ver' is not in required range '$req'";
+my $req_hash = $HAS_CPAN_META ? $full_prereqs->as_string_hash : $full_prereqs;
+
+# Add static includes into a fake section
+for my $mod (@include) {
+    $req_hash->{other}{modules}{$mod} = 0;
+}
+
+for my $phase ( qw(configure build test runtime develop other) ) {
+    next unless $req_hash->{$phase};
+    next if ($phase eq 'develop' and not $ENV{AUTHOR_TESTING});
+
+    for my $type ( qw(requires recommends suggests conflicts modules) ) {
+        next unless $req_hash->{$phase}{$type};
+
+        my $title = ucfirst($phase).' '.ucfirst($type);
+        my @reports = [qw/Module Want Have/];
+
+        for my $mod ( sort keys %{ $req_hash->{$phase}{$type} } ) {
+            next if $mod eq 'perl';
+            next if grep { $_ eq $mod } @exclude;
+
+            my $file = $mod;
+            $file =~ s{::}{/}g;
+            $file .= ".pm";
+            my ($prefix) = grep { -e File::Spec->catfile($_, $file) } @INC;
+
+            my $want = $req_hash->{$phase}{$type}{$mod};
+            $want = "undef" unless defined $want;
+            $want = "any" if !$want && $want == 0;
+
+            my $req_string = $want eq 'any' ? 'any version required' : "version '$want' required";
+
+            if ($prefix) {
+                my $have = MM->parse_version( File::Spec->catfile($prefix, $file) );
+                $have = "undef" unless defined $have;
+                push @reports, [$mod, $want, $have];
+
+                if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META && $type eq 'requires' ) {
+                    if ( $have !~ /\A$lax_version_re\z/ ) {
+                        push @dep_errors, "$mod version '$have' cannot be parsed ($req_string)";
+                    }
+                    elsif ( ! $full_prereqs->requirements_for( $phase, $type )->accepts_module( $mod => $have ) ) {
+                        push @dep_errors, "$mod version '$have' is not in required range '$want'";
+                    }
+                }
+            }
+            else {
+                push @reports, [$mod, $want, "missing"];
+
+                if ( $DO_VERIFY_PREREQS && $type eq 'requires' ) {
+                    push @dep_errors, "$mod is not installed ($req_string)";
+                }
+            }
         }
-      }
-    }
 
-  }
-  else {
-    push @reports, ["missing", $mod];
+        if ( @reports ) {
+            push @full_reports, "=== $title ===\n\n";
 
-    if ( $DO_VERIFY_PREREQS && $all_requires ) {
-      my $req = $req_hash->{$mod};
-      if ( defined $req && length $req ) {
-        push @dep_errors, "$mod is not installed (version '$req' required)";
-      }
+            my $ml = _max( map { length $_->[0] } @reports );
+            my $wl = _max( map { length $_->[1] } @reports );
+            my $hl = _max( map { length $_->[2] } @reports );
+            splice @reports, 1, 0, ["-" x $ml, "-" x $wl, "-" x $hl];
+
+            push @full_reports, map { sprintf("    %*s %*s %*s\n", -$ml, $_->[0], $wl, $_->[1], $hl, $_->[2]) } @reports;
+            push @full_reports, "\n";
+        }
     }
-  }
 }
 
-if ( @reports ) {
-  my $vl = max map { length $_->[0] } @reports;
-  my $ml = max map { length $_->[1] } @reports;
-  splice @reports, 1, 0, ["-" x $vl, "-" x $ml];
-  diag "\nVersions for all modules listed in $source (including optional ones):\n",
-    map {sprintf("  %*s %*s\n",$vl,$_->[0],-$ml,$_->[1])} @reports;
+if ( @full_reports ) {
+    diag "\nVersions for all modules listed in $source (including optional ones):\n\n", @full_reports;
 }
 
 if ( @dep_errors ) {
-  diag join("\n",
-    "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***\n",
-    "The following REQUIRED prerequisites were not satisfied:\n",
-    @dep_errors,
-    "\n"
-  );
+    diag join("\n",
+        "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***\n",
+        "The following REQUIRED prerequisites were not satisfied:\n",
+        @dep_errors,
+        "\n"
+    );
 }
 
 pass;
@@ -2,9 +2,7 @@ use strict;
 use warnings;
 use Test::More;
 
-use Test::Requires {
-    'Test::Output' => '0.01',    # skip all if not installed
-};
+use Test::Requires 'Test::Output';  # skip all if not installed
 
 {
 
@@ -3,9 +3,7 @@ use warnings;
 
 use Test::More;
 
-use Test::Requires {
-    'Test::Output' => '0.01',
-};
+use Test::Requires 'Test::Output';
 
 {
     package Bar;
@@ -1,5 +1,7 @@
 use Test::More;
 
+# very intentionally not doing use strict; use warnings here...
+
 # for classes ...
 {
     package Foo;
@@ -7,7 +9,7 @@ use Test::More;
 
     eval '$foo = 5;';
     ::ok($@, '... got an error because strict is on');
-    ::like($@, qr/Global symbol \"\$foo\" requires explicit package name at/, '... got the right error');
+    ::like($@, qr/Global symbol \"\$foo\" requires explicit package name /, '... got the right error');
 
     {
         my $warn;
@@ -29,7 +31,7 @@ use Test::More;
 
     eval '$foo = 5;';
     ::ok($@, '... got an error because strict is on');
-    ::like($@, qr/Global symbol \"\$foo\" requires explicit package name at/, '... got the right error');
+    ::like($@, qr/Global symbol \"\$foo\" requires explicit package name /, '... got the right error');
 
     {
         my $warn;
@@ -51,7 +53,7 @@ use Test::More;
 
     eval '$foo = 5;';
     ::ok($@, '... got an error because strict is on');
-    ::like($@, qr/Global symbol \"\$foo\" requires explicit package name at/, '... got the right error');
+    ::like($@, qr/Global symbol \"\$foo\" requires explicit package name /, '... got the right error');
 
     {
         my $warn;
@@ -5,9 +5,7 @@ use Test::Fatal;
 use Test::More;
 use Test::Moose qw( with_immutable );
 
-use Test::Requires {
-    'Test::Output' => '0.01',
-};
+use Test::Requires 'Test::Output';
 
 {
     package Baz;
@@ -21,4 +21,3 @@ use Moose::Util::TypeConstraints;
 }
 
 done_testing;
-
@@ -1,10 +1,7 @@
 use strict;
 use warnings;
 
-use Test::Requires {
-    'Test::Output' => '0.01',
-};
-
+use Test::Requires 'Test::Output';
 use Test::More;
 
 {
@@ -1,3 +1,6 @@
+use strict;
+use warnings;
+
 ## This test ensures that sub DEMOLISHALL fires even if there is no sub DEMOLISH
 ## Currently fails because of a bad optimization in DESTROY
 ## Feb 12, 2009 -- Evan Carroll me@evancarroll.com
@@ -1,9 +1,8 @@
 use strict;
 use warnings;
+
 use Test::More;
-use Test::Requires {
-    'Test::Output' => '0.01', # skip all if not installed
-};
+use Test::Requires 'Test::Output';  # skip all if not installed
 
 {
     package R;
@@ -1,3 +1,6 @@
+use strict;
+use warnings;
+
 package Foo;
 use Moose;
 
@@ -0,0 +1,37 @@
+use strict;
+use warnings;
+
+use Moose ();
+# Needed to load MarkAsMethods if we're running from a git checkout
+BEGIN { $Moose::VERSION ||= 42 }
+
+use Test::More;
+use Test::Fatal;
+use Test::Requires {
+    'MooseX::MarkAsMethods' => 0,
+};
+
+{
+    package Role2;
+    use Moose::Role;
+    use MooseX::MarkAsMethods;
+    use overload q{""} => '_stringify';
+    sub _stringify {ref $_[0]}
+}
+
+{
+    package Class2;
+    use Moose;
+    with 'Role2';
+}
+
+ok(! exception {
+    my $class2 = Class2->new;
+    is(
+        "$class2",
+        'Class2',
+        'Class2 got stringification overloading from Role2'
+    );
+}, 'No error creating a Class2 object');
+
+done_testing;
@@ -1,3 +1,6 @@
+use strict;
+use warnings;
+
 use Test::More;
 
 {
@@ -0,0 +1,43 @@
+use strict;
+use warnings;
+
+use Test::More;
+
+{
+    package Role::Overloads;
+    use Moose::Role;
+    use overload q{""} => 'as_string';
+    requires 'as_string';
+}
+
+{
+    package Class::Overloads;
+    use Moose;
+    with 'Role::Overloads';
+    sub as_string { 'foo' }
+}
+
+is(
+    Class::Overloads->new() . q{}, 'foo',
+    'Class::Overloads overloads stringification with overloading defined in role and method defined in class'
+);
+
+{
+    package Parent::NoOverloads;
+    use Moose;
+    sub name { ref $_[0] }
+}
+
+{
+    package Child::Overloads;
+    use Moose;
+    use overload q{""} => 'name';
+    extends 'Parent::NoOverloads';
+}
+
+is(
+    Child::Overloads->new() . q{}, 'Child::Overloads',
+    'Child::Overloads overloads stringification with method inherited from parent'
+);
+
+done_testing;
@@ -1,3 +1,6 @@
+use strict;
+use warnings;
+
 package MyRole;
 
 use Moose::Role;
@@ -4,66 +4,66 @@ use warnings;
 use Test::More;
 
 {
-    package A;
+    package First;
     use Moose;
 
     sub foo {
-        ::BAIL_OUT('A::foo called twice') if $main::seen{'A::foo'}++;
-        return 'a';
+        ::BAIL_OUT('First::foo called twice') if $main::seen{'First::foo'}++;
+        return '1';
     }
 
     sub bar {
-        ::BAIL_OUT('A::bar called twice') if $main::seen{'A::bar'}++;
-        return 'a';
+        ::BAIL_OUT('First::bar called twice') if $main::seen{'First::bar'}++;
+        return '1';
     }
 
     sub baz {
-        ::BAIL_OUT('A::baz called twice') if $main::seen{'A::baz'}++;
-        return 'a';
+        ::BAIL_OUT('First::baz called twice') if $main::seen{'First::baz'}++;
+        return '1';
     }
 }
 
 {
-    package B;
+    package Second;
     use Moose;
-    extends qw(A);
+    extends qw(First);
 
     sub foo {
-        ::BAIL_OUT('B::foo called twice') if $main::seen{'B::foo'}++;
-        return 'b' . super();
+        ::BAIL_OUT('Second::foo called twice') if $main::seen{'Second::foo'}++;
+        return '2' . super();
     }
 
     sub bar {
-        ::BAIL_OUT('B::bar called twice') if $main::seen{'B::bar'}++;
-        return 'b' . ( super() || '' );
+        ::BAIL_OUT('Second::bar called twice') if $main::seen{'Second::bar'}++;
+        return '2' . ( super() || '' );
     }
 
     override baz => sub {
-        ::BAIL_OUT('B::baz called twice') if $main::seen{'B::baz'}++;
-        return 'b' . super();
+        ::BAIL_OUT('Second::baz called twice') if $main::seen{'Second::baz'}++;
+        return '2' . super();
     };
 }
 
 {
-    package C;
+    package Third;
     use Moose;
-    extends qw(B);
+    extends qw(Second);
 
-    sub foo { return 'c' . ( super() || '' ) }
+    sub foo { return '3' . ( super() || '' ) }
 
     override bar => sub {
-        ::BAIL_OUT('C::bar called twice') if $main::seen{'C::bar'}++;
-        return 'c' . super();
+        ::BAIL_OUT('Third::bar called twice') if $main::seen{'Third::bar'}++;
+        return '3' . super();
     };
 
     override baz => sub {
-        ::BAIL_OUT('C::baz called twice') if $main::seen{'C::baz'}++;
-        return 'c' . super();
+        ::BAIL_OUT('Third::baz called twice') if $main::seen{'Third::baz'}++;
+        return '3' . super();
     };
 }
 
-is( C->new->foo, 'c' );
-is( C->new->bar, 'cb' );
-is( C->new->baz, 'cba' );
+is( Third->new->foo, '3' );
+is( Third->new->bar, '32' );
+is( Third->new->baz, '321' );
 
 done_testing;
@@ -1,8 +1,8 @@
-use lib "t/lib";
 use strict;
 use warnings;
 
 use Test::More;
+use lib 't/lib';
 
 BEGIN {
     package MyExporterRole;
@@ -1,16 +1,12 @@
 use strict;
 use warnings;
 
-use FindBin;
-use File::Spec::Functions;
-
 use Test::More;
 
-use lib catdir($FindBin::Bin, 'lib');
-
 use Scalar::Util 'reftype';
 use Class::MOP;
 
+use lib 't/cmop/lib';
 use ArrayBasedStorage;
 
 {
@@ -1,15 +1,10 @@
 use strict;
 use warnings;
 
-use FindBin;
-use File::Spec::Functions;
-
 use Test::More;
-
-use lib catdir($FindBin::Bin, 'lib');
-
 use Class::MOP;
 
+use lib 't/cmop/lib';
 use AttributesWithHistory;
 
 {
@@ -1,15 +1,12 @@
 use strict;
 use warnings;
 
-use FindBin;
-use File::Spec::Functions;
-
 use Test::More;
 use Test::Fatal;
 
 use Class::Load qw( is_class_loaded load_class );
 
-use lib catdir($FindBin::Bin, 'lib');
+use lib 't/cmop/lib';
 
 ## ----------------------------------------------------------------------------
 ## These are all tests which are derived from the Tree::Binary test suite
@@ -1,19 +1,12 @@
 use strict;
 use warnings;
 
-use FindBin;
-use File::Spec::Functions;
-
 use Test::More;
-
-use lib catdir($FindBin::Bin, 'lib');
+use Test::Requires 'Algorithm::C3'; # skip all if not installed
 
 use Class::MOP;
 
-use Test::Requires {
-    'Algorithm::C3' => '0.01', # skip all if not installed
-};
-
+use lib 't/cmop/lib';
 use C3MethodDispatchOrder;
 
 {
@@ -1,15 +1,10 @@
 use strict;
 use warnings;
 
-use FindBin;
-use File::Spec::Functions;
-
 use Test::More;
-
-use lib catdir($FindBin::Bin, 'lib');
-
 use Class::MOP;
 
+use lib 't/cmop/lib';
 use ClassEncapsulatedAttributes;
 
 {
@@ -1,15 +1,11 @@
 use strict;
 use warnings;
 
-use FindBin;
-use File::Spec::Functions;
-
 use Test::More;
 
-use lib catdir($FindBin::Bin, 'lib');
-
 use Scalar::Util 'reftype';
 
+use lib 't/cmop/lib';
 require InsideOutClass;
 
 {
@@ -1,15 +1,11 @@
 use strict;
 use warnings;
 
-use FindBin;
-use File::Spec::Functions;
-
 use Test::More;
 
-use lib catdir($FindBin::Bin, 'lib');
-
 use Class::MOP;
 
+use lib 't/cmop/lib';
 use InstanceCountingClass;
 
 =pod
@@ -1,15 +1,11 @@
 use strict;
 use warnings;
 
-use FindBin;
-use File::Spec::Functions;
-
 use Test::More;
 
-use lib catdir($FindBin::Bin, 'lib');
-
 use Class::MOP;
 
+use lib 't/cmop/lib';
 use LazyClass;
 
 {
@@ -1,15 +1,11 @@
 use strict;
 use warnings;
 
-use FindBin;
-use File::Spec::Functions;
-
 use Test::More;
 
-use lib catdir($FindBin::Bin, 'lib');
-
 use Class::MOP;
 
+use lib 't/cmop/lib';
 use Perl6Attribute;
 
 {
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -56,6 +56,8 @@ my $anon_class_id;
     ok(exists $main::Class::MOP::Class::__ANON__::SERIAL::{$anon_class_id . '::'}, '... the package still exists');
 }
 
+local $TODO = "anon class doesn't get GCed under Devel::Cover" if $INC{'Devel/Cover.pm'};
+
 ok(!exists $main::Class::MOP::Class::__ANON__::SERIAL::{$anon_class_id . '::'}, '... the package no longer exists');
 
 # but it breaks down when we try to create another one ...
@@ -1,12 +1,14 @@
 use strict;
 use warnings;
 
-use Class::MOP;
 use Test::More;
+use Test::Requires 'Test::LeakTrace';   # skip all if not installed
+
+BEGIN {
+    plan skip_all => 'Leak tests fail under Devel::Cover' if $INC{'Devel/Cover.pm'};
+}
 
-use Test::Requires {
-    'Test::LeakTrace' => '0.01', # skip all if not installed
-};
+use Class::MOP;
 
 # 5.10.0 has a bug on weaken($hash_ref) which leaks an AV.
 my $expected = ( $] == 5.010_000 ? 1 : 0 );
@@ -1,10 +1,8 @@
 use strict;
 use warnings;
 
-use Scalar::Util 'blessed', 'reftype';
-
+use Scalar::Util 'reftype';
 use Test::More;
-
 use Class::MOP;
 
 =pod
@@ -1,15 +1,11 @@
 use strict;
 use warnings;
 
-use FindBin;
-use File::Spec::Functions;
-
 use Test::More;
-
-use lib catdir($FindBin::Bin, 'lib');
-
 use Class::MOP;
 
+use lib 't/cmop/lib';
+
 {
     my $warnings;
     local $SIG{__WARN__} = sub { $warnings .= $_[0] };
@@ -1,16 +1,13 @@
 use strict;
 use warnings;
 
-use FindBin;
-use File::Spec::Functions;
-
 use Test::More;
 use Test::Fatal;
 use Scalar::Util;
 
 use Class::MOP;
 
-use lib catdir( $FindBin::Bin, 'lib' );
+use lib 't/cmop/lib';
 
 {
 
@@ -2,10 +2,7 @@ use strict;
 use warnings;
 
 use Test::More;
-
-use Test::Requires {
-    'Test::Output' => '0.01', # skip all if not installed
-};
+use Test::Requires 'Test::Output';  # skip all if not installed
 
 use Class::MOP;
 
@@ -1,4 +1,3 @@
-
 package # hide the package from PAUSE
     ArrayBasedStorage::Instance;
 
@@ -1,4 +1,3 @@
-
 package # hide the package from PAUSE
     AttributesWithHistory;
 
@@ -1,4 +1,3 @@
-
 package BinaryTree;
 
 use strict;
@@ -1,4 +1,3 @@
-
 package # hide from PAUSE
     C3MethodDispatchOrder;
 
@@ -1,4 +1,3 @@
-
 package # hide the package from PAUSE
     ClassEncapsulatedAttributes;
 
@@ -1,4 +1,3 @@
-
 package # hide the package from PAUSE
     InsideOutClass::Attribute;
 
@@ -1,4 +1,3 @@
-
 package # hide the package from PAUSE
     InstanceCountingClass;
 
@@ -1,4 +1,3 @@
-
 package # hide the package from PAUSE
     LazyClass::Attribute;
 
@@ -1,4 +1,3 @@
-
 package MyMetaClass::Attribute;
 
 use strict;
@@ -1,4 +1,3 @@
-
 package MyMetaClass::Instance;
 
 use strict;
@@ -1,4 +1,3 @@
-
 package MyMetaClass::Method;
 
 use strict;
@@ -1,4 +1,3 @@
-
 package MyMetaClass::Random;
 
 use strict;
@@ -1,4 +1,3 @@
-
 package MyMetaClass;
 
 use strict;
@@ -1,4 +1,3 @@
-
 package # hide the package from PAUSE
     Perl6Attribute;
 
@@ -1,4 +1,3 @@
-#!/usr/bin/env perl
 package SyntaxError;
 use strict;
 use warnings;
@@ -8,4 +7,3 @@ use warnings;
     {
 
 1;
-
@@ -15,6 +15,7 @@ BEGIN {
     use_ok('Class::MOP::Mixin::AttributeCore');
     use_ok('Class::MOP::Mixin::HasAttributes');
     use_ok('Class::MOP::Mixin::HasMethods');
+    use_ok('Class::MOP::Mixin::HasOverloads');
     use_ok('Class::MOP::Package');
     use_ok('Class::MOP::Module');
     use_ok('Class::MOP::Class');
@@ -27,9 +28,9 @@ BEGIN {
     use_ok('Class::MOP::Method::Accessor');
     use_ok('Class::MOP::Method::Constructor');
     use_ok('Class::MOP::Method::Meta');
-    use_ok('Class::MOP::Method::Overload');
     use_ok('Class::MOP::Instance');
     use_ok('Class::MOP::Object');
+    use_ok('Class::MOP::Overload');
 }
 
 # make sure we are tracking metaclasses correctly
@@ -41,11 +42,11 @@ my %METAS = (
     'Class::MOP::Method::Accessor'  => Class::MOP::Method::Accessor->meta,
     'Class::MOP::Method::Constructor' => Class::MOP::Method::Constructor->meta,
     'Class::MOP::Method::Meta' => Class::MOP::Method::Meta->meta,
-    'Class::MOP::Method::Overload' => Class::MOP::Method::Overload->meta,
     'Class::MOP::Mixin'   => Class::MOP::Mixin->meta,
-    'Class::MOP::Mixin::AttributeCore'   => Class::MOP::Mixin::AttributeCore->meta,
-    'Class::MOP::Mixin::HasAttributes'   => Class::MOP::Mixin::HasAttributes->meta,
-    'Class::MOP::Mixin::HasMethods'      => Class::MOP::Mixin::HasMethods->meta,
+    'Class::MOP::Mixin::AttributeCore' => Class::MOP::Mixin::AttributeCore->meta,
+    'Class::MOP::Mixin::HasAttributes' => Class::MOP::Mixin::HasAttributes->meta,
+    'Class::MOP::Mixin::HasMethods'    => Class::MOP::Mixin::HasMethods->meta,
+    'Class::MOP::Mixin::HasOverloads'  => Class::MOP::Mixin::HasOverloads->meta,
     'Class::MOP::Package'         => Class::MOP::Package->meta,
     'Class::MOP::Module'          => Class::MOP::Module->meta,
     'Class::MOP::Class'           => Class::MOP::Class->meta,
@@ -53,13 +54,14 @@ my %METAS = (
     'Class::MOP::Method::Wrapped' => Class::MOP::Method::Wrapped->meta,
     'Class::MOP::Instance'        => Class::MOP::Instance->meta,
     'Class::MOP::Object'          => Class::MOP::Object->meta,
+    'Class::MOP::Overload'        => Class::MOP::Overload->meta,
     'Class::MOP::Class::Immutable::Trait' => Class::MOP::class_of('Class::MOP::Class::Immutable::Trait'),
     'Class::MOP::Class::Immutable::Class::MOP::Class' => Class::MOP::Class::Immutable::Class::MOP::Class->meta,
     'UNIVERSAL' => Class::MOP::class_of('UNIVERSAL'),
 );
 
 ok( is_class_loaded($_), '... ' . $_ . ' is loaded' )
-    for keys %METAS;
+    for sort keys %METAS;
 
 # The trait shouldn't be made immutable, it doesn't actually do anything, and
 # it doesn't even matter because it's not a class that will be
@@ -100,14 +102,15 @@ SKIP: {
             Class::MOP::Method::Generated->meta,
             Class::MOP::Method::Inlined->meta,
             Class::MOP::Method::Meta->meta,
-            Class::MOP::Method::Overload->meta,
             Class::MOP::Method::Wrapped->meta,
             Class::MOP::Mixin->meta,
             Class::MOP::Mixin::AttributeCore->meta,
             Class::MOP::Mixin::HasAttributes->meta,
             Class::MOP::Mixin::HasMethods->meta,
+            Class::MOP::Mixin::HasOverloads->meta,
             Class::MOP::Module->meta,
             Class::MOP::Object->meta,
+            Class::MOP::Overload->meta,
             Class::MOP::Package->meta,
             Class::MOP::class_of('UNIVERSAL'),
         ],
@@ -126,6 +129,7 @@ SKIP: {
                 Class::MOP::Mixin::AttributeCore
                 Class::MOP::Mixin::HasAttributes
                 Class::MOP::Mixin::HasMethods
+                Class::MOP::Mixin::HasOverloads
                 Class::MOP::Instance
                 Class::MOP::Method
                 Class::MOP::Method::Accessor
@@ -134,9 +138,9 @@ SKIP: {
                 Class::MOP::Method::Inlined
                 Class::MOP::Method::Wrapped
                 Class::MOP::Method::Meta
-                Class::MOP::Method::Overload
                 Class::MOP::Module
                 Class::MOP::Object
+                Class::MOP::Overload
                 Class::MOP::Package
                 UNIVERSAL
                 /,
@@ -1,9 +1,9 @@
-# Testing magical scalars (using tied scalar)
-# Note that XSUBs do not handle magical scalars automatically.
-
 use strict;
 use warnings;
 
+# Testing magical scalars (using tied scalar)
+# Note that XSUBs do not handle magical scalars automatically.
+
 use Test::More;
 use Test::Fatal;
 
@@ -1,14 +1,11 @@
 use strict;
 use warnings;
 
-use FindBin;
-use File::Spec::Functions;
-
 use Test::More;
 
 use Class::Load qw(is_class_loaded);
 
-use lib catdir($FindBin::Bin, 'lib');
+use lib 't/cmop/lib';
 
 {
     package Foo;
@@ -138,7 +138,7 @@ like( exception {
         attribute_metaclass => 'Baz::Meta::Attribute',
         method_metaclass    => 'Baz::Meta::Method',
     );
-}, qr/compatible/ );
+}, qr/\QAttribute (class_name) is required/ );
 
 {
     package Quuux::Meta::Attribute;
@@ -71,7 +71,7 @@ ok( $Foo->has_method('cake'), '... got the constant method stub cake' );
 
 my $foo = sub {'Foo::foo'};
 
-ok( !UNIVERSAL::isa( $foo, 'Class::MOP::Method' ),
+ok( !Scalar::Util::blessed($foo),
     '... our method is not yet blessed' );
 
 is( exception {
@@ -1,15 +1,12 @@
 use strict;
 use warnings;
 
-use FindBin;
-use File::Spec::Functions;
-
 use Test::More;
 use Test::Fatal;
 
 use Class::MOP;
 
-use lib catdir($FindBin::Bin, 'lib');
+use lib 't/cmop/lib';
 
 # make sure the Class::MOP::Class->meta does the right thing
 
@@ -2,7 +2,6 @@ use strict;
 use warnings;
 
 use Test::More;
-
 use Test::Requires {
     'SUPER' => 1.10, # skip all if not installed
 };
@@ -334,7 +334,7 @@ is(${$class_mop_class_meta->get_package_symbol('$VERSION')},
 
 is_deeply(
     [ $class_mop_class_meta->superclasses ],
-    [ qw/Class::MOP::Module Class::MOP::Mixin::HasAttributes Class::MOP::Mixin::HasMethods/ ],
+    [ qw/Class::MOP::Module Class::MOP::Mixin::HasAttributes Class::MOP::Mixin::HasMethods Class::MOP::Mixin::HasOverloads/ ],
     '... Class::MOP::Class->superclasses == [ Class::MOP::Module ]');
 
 is_deeply(
@@ -344,10 +344,13 @@ is_deeply(
         Class::MOP::Module
         Class::MOP::Package
         Class::MOP::Object
+        Class::MOP::Mixin
         Class::MOP::Mixin::HasAttributes
         Class::MOP::Mixin
         Class::MOP::Mixin::HasMethods
         Class::MOP::Mixin
+        Class::MOP::Mixin::HasOverloads
+        Class::MOP::Mixin
     / ],
     '... Class::MOP::Class->class_precedence_list == [ Class::MOP::Class Class::MOP::Module Class::MOP::Package ]');
 
@@ -9,9 +9,7 @@ use Test::Fatal;
 use File::Spec;
 use File::Temp 'tempdir';
 
-use Test::Requires {
-    'Module::Refresh' => '0.01', # skip all if not installed
-};
+use Test::Requires 'Module::Refresh';   # skip all if not installed
 
 =pod
 
@@ -5,7 +5,7 @@ use Test::More;
 
 use Test::Requires {
     'DBM::Deep' => '1.0003', # skip all if not installed
-    'DateTime::Format::MySQL' => '0.01',
+    'DateTime::Format::MySQL' => '0',
 };
 
 use Test::Fatal;
@@ -12,10 +12,7 @@ Pretty well if I do say so myself :)
 
 =cut
 
-use Test::Requires {
-    'Declare::Constraints::Simple' => '0.01', # skip all if not installed
-};
-
+use Test::Requires 'Declare::Constraints::Simple';  # skip all if not installed
 use Test::Fatal;
 
 {
@@ -13,10 +13,7 @@ but it is not completely horrid either.
 
 =cut
 
-use Test::Requires {
-    'Test::Deep' => '0.01', # skip all if not installed
-};
-
+use Test::Requires 'Test::Deep';    # skip all if not installed
 use Test::Fatal;
 
 {
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -61,7 +60,7 @@ use Test::Fatal;
         "... must supply all the required attribute");
 
     is(
-        $exception->attribute->name,
+        $exception->attribute_name,
         'baz',
         "... must supply all the required attribute");
 
@@ -217,7 +216,7 @@ use Test::Fatal;
     }
 
     my $exception = exception {
-	Foo->new;
+        Foo->new;
     };
 
     like(
@@ -232,12 +231,12 @@ use Test::Fatal;
 
     isa_ok(
         $exception->instance,
-	'Foo',
+        'Foo',
         "Correct error when a builder method is not present");
 
     is(
-	$exception->attribute->name,
-	'baz',
+        $exception->attribute->name,
+        'baz',
         "Correct error when a builder method is not present");
 
     is(
@@ -249,12 +248,12 @@ use Test::Fatal;
 # tests for CannotDelegateWithoutIsa
 {
     my $exception = exception {
-	package Foo;
-	use Moose;
-	has 'bar' => (
-	    is      => 'ro',
-	    handles => qr/baz/,
-	);
+        package Foo;
+        use Moose;
+        has 'bar' => (
+            is      => 'ro',
+            handles => qr/baz/,
+        );
     };
 
     like(
@@ -270,11 +269,11 @@ use Test::Fatal;
 
 {
     my $exception = exception {
-	package Foo;
-	use Moose;
-	has bar => (
-	    is         => 'ro',
-	    auto_deref => 1,
+        package Foo;
+        use Moose;
+        has bar => (
+            is         => 'ro',
+            auto_deref => 1,
         );
     };
 
@@ -289,20 +288,20 @@ use Test::Fatal;
         "You cannot auto-dereference without specifying a type constraint on attribute");
 
     is(
-	$exception->attribute_name,
-	'bar',
+        $exception->attribute_name,
+        'bar',
         "You cannot auto-dereference without specifying a type constraint on attribute");
 }
 
 {
     my $exception = exception {
-	package Foo;
-	use Moose;
-	has 'bar' => (
-	    is       => 'ro',
-	    required => 1,
-	    init_arg => undef,
-	);
+        package Foo;
+        use Moose;
+        has 'bar' => (
+            is       => 'ro',
+            required => 1,
+            init_arg => undef,
+        );
     };
 
     like(
@@ -318,12 +317,12 @@ use Test::Fatal;
 
 {
     my $exception = exception {
-	package Foo;
-	use Moose;
-	has 'bar' => (
-	    is   => 'ro',
-	    lazy => 1,
-	);
+        package Foo;
+        use Moose;
+        has 'bar' => (
+            is   => 'ro',
+            lazy => 1,
+        );
     };
 
     like(
@@ -339,13 +338,13 @@ use Test::Fatal;
 
 {
     my $exception = exception {
-	package Foo;
-	use Moose;
-	has 'bar' => (
-	    is         => 'ro',
-	    isa        => 'Int',
-	    auto_deref => 1,
-	);
+        package Foo;
+        use Moose;
+        has 'bar' => (
+            is         => 'ro',
+            isa        => 'Int',
+            auto_deref => 1,
+        );
     };
 
     like(
@@ -361,13 +360,13 @@ use Test::Fatal;
 
 {
     my $exception = exception {
-	package Foo;
-	use Moose;
-	has 'bar' => (
-	    is         => 'ro',
-	    lazy_build => 1,
-	    default    => 1,
-	);
+        package Foo;
+        use Moose;
+        has 'bar' => (
+            is         => 'ro',
+            lazy_build => 1,
+            default    => 1,
+        );
     };
 
     like(
@@ -383,15 +382,15 @@ use Test::Fatal;
 
 {
     my $exception = exception {
-	package Delegator;
-	use Moose;
+        package Delegator;
+        use Moose;
 
-	sub full { 1 }
-	sub stub;
+        sub full { 1 }
+        sub stub;
 
-	has d1 => (
-	    isa     => 'X',
-	    handles => ['full'],
+        has d1 => (
+            isa     => 'X',
+            handles => ['full'],
         );
     };
 
@@ -406,26 +405,26 @@ use Test::Fatal;
         "got an error when trying to declare a delegation method that overwrites a local method");
 
     $exception = exception {
-	package Delegator;
-	use Moose;
+        package Delegator;
+        use Moose;
 
-	has d2 => (
-	    isa     => 'X',
-	    handles => ['stub'],
+        has d2 => (
+            isa     => 'X',
+            handles => ['stub'],
         );
     };
 
     is(
-	$exception,
+        $exception,
         undef,
         'no error when trying to declare a delegation method that overwrites a stub method');
 }
 
 {
     {
-	package Test;
-	use Moose;
-	has 'foo' => (
+        package Test;
+        use Moose;
+        has 'foo' => (
             is        => 'rw',
             clearer   => 'clear_foo',
             predicate => 'foo',
@@ -434,29 +433,29 @@ use Test::Fatal;
     }
 
     my $exception = exception {
-	package Test2;
-	use Moose;
-	extends 'Test';
-	has '+foo' => (
-	    clearer   => 'clear_foo1',
-	);
+        package Test2;
+        use Moose;
+        extends 'Test';
+        has '+foo' => (
+            clearer   => 'clear_foo1',
+        );
     };
 
     like(
-	$exception,
-	qr/\QIllegal inherited options => (clearer)/,
-	"Illegal inherited option is given");
+        $exception,
+        qr/\QIllegal inherited options => (clearer)/,
+        "Illegal inherited option is given");
 
     isa_ok(
-	$exception,
-	"Moose::Exception::IllegalInheritedOptions",
-	"Illegal inherited option is given");
+        $exception,
+        "Moose::Exception::IllegalInheritedOptions",
+        "Illegal inherited option is given");
 
     $exception = exception {
-	package Test3;
-	use Moose;
-	extends 'Test';
-	has '+foo' => (
+        package Test3;
+        use Moose;
+        extends 'Test';
+        has '+foo' => (
             clearer   => 'clear_foo1',
             predicate => 'xyz',
             accessor  => 'bar2',
@@ -464,27 +463,27 @@ use Test::Fatal;
     };
 
     like(
-	$exception,
-	qr/\QIllegal inherited options => (accessor, clearer, predicate)/,
-	"Illegal inherited option is given");
+        $exception,
+        qr/\QIllegal inherited options => (accessor, clearer, predicate)/,
+        "Illegal inherited option is given");
 }
 
 # tests for exception thrown is Moose::Meta::Attribute::set_value
 {
     my $exception = exception {
-	{
-	    package Foo1;
-	    use Moose;
-	    has 'bar' => (
-		is       => 'ro',
-		required => 1,
-	    );
-	}
-
-	my $instance = Foo1->new(bar => "test");
-	my $bar_attr = Foo1->meta->get_attribute('bar');
-	my $bar_writer = $bar_attr->get_write_method_ref;
-	$bar_writer->($instance);
+        {
+            package Foo1;
+            use Moose;
+            has 'bar' => (
+                is       => 'ro',
+                required => 1,
+            );
+        }
+
+        my $instance = Foo1->new(bar => "test");
+        my $bar_attr = Foo1->meta->get_attribute('bar');
+        my $bar_writer = $bar_attr->get_write_method_ref;
+        $bar_writer->($instance);
     };
 
     like(
@@ -498,7 +497,7 @@ use Test::Fatal;
         "... must supply all the required attribute");
 
     is(
-        $exception->attribute->name,
+        $exception->attribute_name,
         'bar',
         "... must supply all the required attribute");
 
@@ -510,123 +509,123 @@ use Test::Fatal;
 
 {
     my $exception = exception {
-	{
-	    package Foo1;
-	    use Moose;
-	    has 'bar' => (
+        {
+            package Foo1;
+            use Moose;
+            has 'bar' => (
                 is       => 'ro',
                 handles  => \*STDIN,
-	    );
-	}
+            );
+        }
     };
 
     my $handle = \*STDIN;
 
     like(
-	$exception,
-	qr/\QUnable to canonicalize the 'handles' option with $handle/,
-	"handles doesn't take file handle");
+        $exception,
+        qr/\QUnable to canonicalize the 'handles' option with $handle/,
+        "handles doesn't take file handle");
         #Unable to canonicalize the 'handles' option with GLOB(0x109d0b0)
 
     isa_ok(
-	$exception,
-	"Moose::Exception::UnableToCanonicalizeHandles",
-	"handles doesn't take file handle");
+        $exception,
+        "Moose::Exception::UnableToCanonicalizeHandles",
+        "handles doesn't take file handle");
 
 }
 
 {
     my $exception = exception {
-	{
-	    package Foo1;
-	    use Moose;
-	    has 'bar' => (
+        {
+            package Foo1;
+            use Moose;
+            has 'bar' => (
                 is       => 'ro',
                 handles  => 'Foo1',
-	    );
-	}
+            );
+        }
     };
 
     like(
-	$exception,
-	qr/\QUnable to canonicalize the 'handles' option with Foo1 because its metaclass is not a Moose::Meta::Role/,
-	"'Str' given to handles should be a metaclass of Moose::Meta::Role");
+        $exception,
+        qr/\QUnable to canonicalize the 'handles' option with Foo1 because its metaclass is not a Moose::Meta::Role/,
+        "'Str' given to handles should be a metaclass of Moose::Meta::Role");
 
     isa_ok(
-	$exception,
-	"Moose::Exception::UnableToCanonicalizeNonRolePackage",
-	"'Str' given to handles should be a metaclass of Moose::Meta::Role");
+        $exception,
+        "Moose::Exception::UnableToCanonicalizeNonRolePackage",
+        "'Str' given to handles should be a metaclass of Moose::Meta::Role");
 }
 
 {
     my $exception = exception {
-	{
-	    package Foo1;
-	    use Moose;
-	    has 'bar' => (
+        {
+            package Foo1;
+            use Moose;
+            has 'bar' => (
                 is      => 'ro',
                 isa     => 'Not::Loaded',
                 handles => qr/xyz/,
             );
-	}
+        }
     };
 
     like(
-	$exception,
-	qr/\QThe bar attribute is trying to delegate to a class which has not been loaded - Not::Loaded/,
-	"You cannot delegate to a class which has not yet loaded");
+        $exception,
+        qr/\QThe bar attribute is trying to delegate to a class which has not been loaded - Not::Loaded/,
+        "You cannot delegate to a class which has not yet loaded");
 
     isa_ok(
-	$exception,
-	"Moose::Exception::DelegationToAClassWhichIsNotLoaded",
-	"You cannot delegate to a class which has not yet loaded");
+        $exception,
+        "Moose::Exception::DelegationToAClassWhichIsNotLoaded",
+        "You cannot delegate to a class which has not yet loaded");
 
     is(
         $exception->attribute->name,
-	'bar',
-	"You cannot delegate to a class which has not yet loaded"
+        'bar',
+        "You cannot delegate to a class which has not yet loaded"
     );
 
     is(
         $exception->class_name,
-	'Not::Loaded',
-	"You cannot delegate to a class which has not yet loaded"
+        'Not::Loaded',
+        "You cannot delegate to a class which has not yet loaded"
     );
 }
 
 {
     my $exception = exception {
-	{
-	    package Foo1;
-	    use Moose;
-	    has bar => (
+        {
+            package Foo1;
+            use Moose;
+            has bar => (
                 is      => 'ro',
                 does    => 'Role',
                 handles => qr/Role/,
             );
-	}
+        }
     };
 
     like(
-	$exception,
-	qr/\QThe bar attribute is trying to delegate to a role which has not been loaded - Role/,
-	"You cannot delegate to a role which has not yet loaded");
+        $exception,
+        qr/\QThe bar attribute is trying to delegate to a role which has not been loaded - Role/,
+        "You cannot delegate to a role which has not yet loaded");
 
     isa_ok(
-	$exception,
-	"Moose::Exception::DelegationToARoleWhichIsNotLoaded",
-	"You cannot delegate to a role which has not yet loaded");
+        $exception,
+        "Moose::Exception::DelegationToARoleWhichIsNotLoaded",
+        "You cannot delegate to a role which has not yet loaded");
 
     is(
         $exception->attribute->name,
-	'bar',
-	"You cannot delegate to a role which has not yet loaded"
+        'bar',
+        "You cannot delegate to a role which has not yet loaded"
     );
 
     is(
         $exception->role_name,
-	'Role',
-	"You cannot delegate to a role which has not yet loaded"
+        'Role',
+        "You cannot delegate to a role which has not yet loaded"
     );
 }
 
@@ -641,7 +640,7 @@ use Test::Fatal;
                 isa     => 'Int',
                 handles => qr/xyz/,
             );
-	}
+        }
     };
 
     like(
@@ -749,43 +748,43 @@ use Test::Fatal;
         "You cannot coerce a type unless coercion is supported by that type");
 
     is(
-        $exception->type->name,
+        $exception->type_name,
         'HexNum',
         "You cannot coerce a type unless coercion is supported by that type");
 }
 
 {
     {
-	package Parent;
-	use Moose;
+        package Parent;
+        use Moose;
 
-	has foo => (
-	    is      => 'rw',
-	    isa     => 'Num',
-	    default => 5.5,
+        has foo => (
+            is      => 'rw',
+            isa     => 'Num',
+            default => 5.5,
         );
     }
 
     {
-	package Child;
-	use Moose;
-	extends 'Parent';
+        package Child;
+        use Moose;
+        extends 'Parent';
 
-	has '+foo' => (
-	    isa     => 'Int',
-	    default => 100,
+        has '+foo' => (
+            isa     => 'Int',
+            default => 100,
        );
     }
 
     my $foo = Child->new;
     my $exception = exception {
-	$foo->foo(10.5);
+        $foo->foo(10.5);
     };
 
     like(
-	$exception,
-	qr/\QAttribute (foo) does not pass the type constraint because: Validation failed for 'Int' with value 10.5/,
-	"10.5 is not an Int");
+        $exception,
+        qr/\QAttribute (foo) does not pass the type constraint because: Validation failed for 'Int' with value 10.5/,
+        "10.5 is not an Int");
 
     isa_ok(
         $exception,
@@ -793,15 +792,15 @@ use Test::Fatal;
         "10.5 is not an Int");
 
     is(
-	$exception->class_name,
-	"Child",
-	"10.5 is not an Int");
+        $exception->class_name,
+        "Child",
+        "10.5 is not an Int");
 }
 
 {
     {
-	package Foo2;
-	use Moose;
+        package Foo2;
+        use Moose;
 
         has a4 => (
             traits  => ['Array'],
@@ -939,7 +938,7 @@ use Test::Fatal;
         "Cannot auto-deref with 'Int'");
 
     is(
-        $exception->type->name,
+        $exception->type_name,
         "Int",
         "Cannot auto-deref with 'Int'");
 }
@@ -950,12 +949,12 @@ use Test::Fatal;
         my $int = find_type_constraint('Int');
         my $from_parameterizable = $parameterizable->parameterize($int);
 
-	{
+        {
             package Parameterizable;
             use Moose;
 
             has from_parameterizable => ( is => 'rw', isa => $from_parameterizable );
-	}
+        }
     }
 
     my $params = Parameterizable->new();
@@ -964,8 +963,8 @@ use Test::Fatal;
     };
 
     like(
-	$exception,
-	qr/\QAttribute (from_parameterizable) does not pass the type constraint because: Validation failed for 'ParameterizableArrayRef[Int]'\E with value "?Hello"?/,
+        $exception,
+        qr/\QAttribute (from_parameterizable) does not pass the type constraint because: Validation failed for 'ParameterizableArrayRef[Int]'\E with value "?Hello"?/,
         "'Hello' is a Str");
 
     isa_ok(
@@ -974,8 +973,8 @@ use Test::Fatal;
         "'Hello' is a Str");
 
     is(
-	$exception->class_name,
-	"Parameterizable",
+        $exception->class_name,
+        "Parameterizable",
         "'Hello' is a Str");
 
     is(
@@ -1058,7 +1057,7 @@ use Test::Fatal;
         "passing no value to set_foo_required");
 
     is(
-        $exception->attribute->name,
+        $exception->attribute_name,
         'foo_required',
         "passing no value to set_foo_required");
 
@@ -1167,29 +1166,29 @@ use Test::Fatal;
 
 {
     my $exception = exception {
-	{
-	    package Foo1;
-	    use Moose;
-	    has bar => (
+        {
+            package Foo1;
+            use Moose;
+            has bar => (
                 is       => 'ro',
                 required => 1,
                 isa      => 'Int',
-	    );
-	}
+            );
+        }
 
-	Foo1->new(bar => "test");
+        Foo1->new(bar => "test");
     };
 
     like(
-	$exception,
-	qr/^Attribute \(bar\) does not pass the type constraint because: Validation failed for 'Int' with value "?test"?/,
-	"bar is an 'Int' and 'Str' is given");
+        $exception,
+        qr/^Attribute \(bar\) does not pass the type constraint because: Validation failed for 'Int' with value "?test"?/,
+        "bar is an 'Int' and 'Str' is given");
         #Attribute (bar) does not pass the type constraint because: Validation failed for 'Int' with value "test"
 
     isa_ok(
-	$exception,
-	"Moose::Exception::ValidationFailedForTypeConstraint",
-	"bar is an 'Int' and 'Str' is given");
+        $exception,
+        "Moose::Exception::ValidationFailedForTypeConstraint",
+        "bar is an 'Int' and 'Str' is given");
 }
 
 done_testing;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -9,7 +8,7 @@ use Moose();
 
 {
     my $exception =  exception {
-	my $class = Class::MOP::Attribute->new;
+        my $class = Class::MOP::Attribute->new;
     };
 
     like(
@@ -57,39 +56,39 @@ use Moose();
 
 {
     my $exception =  exception {
-	Class::MOP::Attribute->new( "foo", ( default => [1] ) );
+        Class::MOP::Attribute->new( "foo", ( default => [1] ) );
     };
 
     like(
         $exception,
         qr/\QReferences are not allowed as default values, you must wrap the default of 'foo' in a CODE reference (ex: sub { [] } and not [])/,
-	"default value can't take references");
+        "default value can't take references");
 
     isa_ok(
         $exception,
         "Moose::Exception::ReferencesAreNotAllowedAsDefault",
-	"default value can't take references");
+        "default value can't take references");
 
     is(
         $exception->attribute_name,
         "foo",
-	"default value can't take references");
+        "default value can't take references");
 }
 
 {
     my $exception =  exception {
-	Class::MOP::Attribute->new( "foo", ( required => 1, init_arg => undef ) );
+        Class::MOP::Attribute->new( "foo", ( required => 1, init_arg => undef ) );
     };
 
     like(
         $exception,
         qr/A required attribute must have either 'init_arg', 'builder', or 'default'/,
-	"no 'init_arg', 'builder' or 'default' is given");
+        "no 'init_arg', 'builder' or 'default' is given");
 
     isa_ok(
         $exception,
         "Moose::Exception::RequiredAttributeLacksInitialization",
-	"no 'init_arg', 'builder' or 'default' is given");
+        "no 'init_arg', 'builder' or 'default' is given");
 }
 
 {
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -9,10 +8,10 @@ use Moose();
 
 {
     my $exception = exception {
-	package Foo;
-	use Moose;
-	__PACKAGE__->meta->make_immutable;
-	__PACKAGE__->meta->superclasses("Bar");
+        package Foo;
+        use Moose;
+        __PACKAGE__->meta->make_immutable;
+        __PACKAGE__->meta->superclasses("Bar");
     };
 
     like(
@@ -33,26 +32,26 @@ use Moose();
 
 {
     my $exception = exception {
-	package Foo;
-	use Moose;
-	__PACKAGE__->meta->make_immutable;
-	__PACKAGE__->meta->add_method( foo => sub { "foo" } );
+        package Foo;
+        use Moose;
+        __PACKAGE__->meta->make_immutable;
+        __PACKAGE__->meta->add_method( foo => sub { "foo" } );
     };
 
     like(
         $exception,
         qr/The 'add_method' method cannot be called on an immutable instance/,
-	"calling 'add_method' on an immutable instance");
+        "calling 'add_method' on an immutable instance");
 
     isa_ok(
         $exception,
         "Moose::Exception::CallingMethodOnAnImmutableInstance",
-	"calling 'add_method' on an immutable instance");
+        "calling 'add_method' on an immutable instance");
 
     is(
         $exception->method_name,
         "add_method",
-	"calling 'add_method' on an immutable instance");
+        "calling 'add_method' on an immutable instance");
 }
 
 done_testing;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -9,7 +8,7 @@ use Moose();
 
 {
     my $exception =  exception {
-	my $class = Class::MOP::Class::initialize;
+        my $class = Class::MOP::Class::initialize;
     };
 
     like(
@@ -25,7 +24,7 @@ use Moose();
 
 {
     my $exception =  exception {
-	my $class = Class::MOP::Class::create("Foo" => ( superclasses => ('foo') ));
+        my $class = Class::MOP::Class::create("Foo" => ( superclasses => ('foo') ));
     };
 
     like(
@@ -39,15 +38,15 @@ use Moose();
         "an Array is of superclasses is passed");
 
     is(
-	$exception->class,
-	'Foo',
+        $exception->class,
+        'Foo',
         "an Array is of superclasses is passed");
 }
 
 
 {
     my $exception =  exception {
-	my $class = Class::MOP::Class::create("Foo" => ( attributes => ('foo') ));
+        my $class = Class::MOP::Class::create("Foo" => ( attributes => ('foo') ));
     };
 
     like(
@@ -61,14 +60,14 @@ use Moose();
         "an Array is of attributes is passed");
 
     is(
-	$exception->class,
-	'Foo',
+        $exception->class,
+        'Foo',
         "an Array is of attributes is passed");
 }
 
 {
     my $exception =  exception {
-	my $class = Class::MOP::Class::create("Foo" => ( methods => ('foo') ) );
+        my $class = Class::MOP::Class::create("Foo" => ( methods => ('foo') ) );
     };
 
     like(
@@ -82,8 +81,8 @@ use Moose();
         "a Hash is of methods is passed");
 
     is(
-	$exception->class,
-	'Foo',
+        $exception->class,
+        'Foo',
         "a Hash is of methods is passed");
 }
 
@@ -104,8 +103,8 @@ use Moose();
         "no method name given to find_method_by_name");
 
     is(
-	$exception->class->name,
-	'Foo',
+        $exception->class_name,
+        'Foo',
         "no method name given to find_method_by_name");
 }
 
@@ -126,8 +125,8 @@ use Moose();
         "no method name given to find_all_methods_by_name");
 
     is(
-	$exception->class->name,
-	'Foo',
+        $exception->class_name,
+        'Foo',
         "no method name given to find_all_methods_by_name");
 }
 
@@ -148,8 +147,8 @@ use Moose();
         "no method name given to find_next_method_by_name");
 
     is(
-	$exception->class->name,
-	'Foo',
+        $exception->class_name,
+        'Foo',
         "no method name given to find_next_method_by_name");
 }
 
@@ -157,178 +156,178 @@ use Moose();
     my $class = Class::MOP::Class->create("Foo");
     my $foo = "foo";
     my $exception =  exception {
-	$class->clone_object( $foo );
+        $class->clone_object( $foo );
     };
 
     like(
         $exception,
         qr/\QYou must pass an instance of the metaclass (Foo), not (foo)/,
-	"clone_object expects an instance of the metaclass");
+        "clone_object expects an instance of the metaclass");
 
     isa_ok(
         $exception,
         "Moose::Exception::CloneObjectExpectsAnInstanceOfMetaclass",
-	"clone_object expects an instance of the metaclass");
+        "clone_object expects an instance of the metaclass");
 
     is(
-	$exception->class->name,
-	'Foo',
-	"clone_object expects an instance of the metaclass");
+        $exception->class_name,
+        'Foo',
+        "clone_object expects an instance of the metaclass");
 
    is(
-	$exception->instance,
-	'foo',
-	"clone_object expects an instance of the metaclass");
+        $exception->instance,
+        'foo',
+        "clone_object expects an instance of the metaclass");
 }
 
 {
     {
-	package Foo;
-	use Moose;
+        package Foo;
+        use Moose;
     }
     {
-	package Foo2;
-	use Moose;
+        package Foo2;
+        use Moose;
     }
     my $foo2 = Foo2->new;
     my $exception =  exception {
-	Foo->meta->rebless_instance( $foo2 );
+        Foo->meta->rebless_instance( $foo2 );
     };
 
     like(
         $exception,
         qr/\QYou may rebless only into a subclass of (Foo2), of which (Foo) isn't./,
-	"you can rebless only into subclass");
+        "you can rebless only into subclass");
 
     isa_ok(
         $exception,
         "Moose::Exception::CanReblessOnlyIntoASubclass",
-	"you can rebless only into subclass");
+        "you can rebless only into subclass");
 
     is(
-	$exception->class->name,
-	'Foo',
-	"you can rebless only into subclass");
+        $exception->class_name,
+        'Foo',
+        "you can rebless only into subclass");
 
    is(
-	$exception->instance,
-	$foo2,
-	"you can rebless only into subclass");
+        $exception->instance,
+        $foo2,
+        "you can rebless only into subclass");
 }
 
 {
     {
-	package Foo;
-	use Moose;
+        package Foo;
+        use Moose;
     }
     {
-	package Foo2;
-	use Moose;
+        package Foo2;
+        use Moose;
     }
     my $foo = Foo->new;
     my $exception =  exception {
-	Foo2->meta->rebless_instance_back( $foo );
+        Foo2->meta->rebless_instance_back( $foo );
     };
 
     like(
         $exception,
         qr/\QYou may rebless only into a superclass of (Foo), of which (Foo2) isn't./,
-	"you can rebless only into superclass");
+        "you can rebless only into superclass");
 
     isa_ok(
         $exception,
         "Moose::Exception::CanReblessOnlyIntoASuperclass",
-	"you can rebless only into superclass");
+        "you can rebless only into superclass");
 
     is(
-	$exception->instance,
-	$foo,
-	"you can rebless only into superclass");
+        $exception->instance,
+        $foo,
+        "you can rebless only into superclass");
 
    is(
-	$exception->class->name,
-	"Foo2",
-	"you can rebless only into superclass");
+        $exception->class_name,
+        "Foo2",
+        "you can rebless only into superclass");
 }
 
 {
     {
-	package Foo;
-	use Moose;
+        package Foo;
+        use Moose;
     }
     my $exception =  exception {
-	Foo->meta->add_before_method_modifier;
+        Foo->meta->add_before_method_modifier;
     };
 
     like(
         $exception,
         qr/You must pass in a method name/,
-	"no method name passed to method modifier");
+        "no method name passed to method modifier");
 
     isa_ok(
         $exception,
         "Moose::Exception::MethodModifierNeedsMethodName",
-	"no method name passed to method modifier");
+        "no method name passed to method modifier");
 
     is(
-	$exception->class->name,
-	"Foo",
-	"no method name passed to method modifier");
+        $exception->class_name,
+        "Foo",
+        "no method name passed to method modifier");
 }
 
 {
     {
-	package Foo;
-	use Moose;
+        package Foo;
+        use Moose;
     }
     my $exception =  exception {
-	Foo->meta->add_after_method_modifier;
+        Foo->meta->add_after_method_modifier;
     };
 
     like(
         $exception,
         qr/You must pass in a method name/,
-	"no method name passed to method modifier");
+        "no method name passed to method modifier");
 
     isa_ok(
         $exception,
         "Moose::Exception::MethodModifierNeedsMethodName",
-	"no method name passed to method modifier");
+        "no method name passed to method modifier");
 
     is(
-	$exception->class->name,
-	"Foo",
-	"no method name passed to method modifier");
+        $exception->class_name,
+        "Foo",
+        "no method name passed to method modifier");
 }
 
 {
     {
-	package Foo;
-	use Moose;
+        package Foo;
+        use Moose;
     }
     my $exception =  exception {
-	Foo->meta->add_around_method_modifier;
+        Foo->meta->add_around_method_modifier;
     };
 
     like(
         $exception,
         qr/You must pass in a method name/,
-	"no method name passed to method modifier");
+        "no method name passed to method modifier");
 
     isa_ok(
         $exception,
         "Moose::Exception::MethodModifierNeedsMethodName",
-	"no method name passed to method modifier");
+        "no method name passed to method modifier");
 
     is(
-	$exception->class->name,
-	"Foo",
-	"no method name passed to method modifier");
+        $exception->class_name,
+        "Foo",
+        "no method name passed to method modifier");
 }
 
 {
     my $exception =  exception {
-	my $class = Class::MOP::Class->_construct_class_instance;
+        my $class = Class::MOP::Class->_construct_class_instance;
     };
 
     like(
@@ -345,119 +344,119 @@ use Moose();
 {
     my $class = Class::MOP::Class->create("Foo");
     my $exception =  exception {
-	$class->add_before_method_modifier("foo");
+        $class->add_before_method_modifier("foo");
     };
 
     like(
         $exception,
         qr/The method 'foo' was not found in the inheritance hierarchy for Foo/,
-	'method "foo" is not defined in class "Foo"');
+        'method "foo" is not defined in class "Foo"');
 
     isa_ok(
         $exception,
         "Moose::Exception::MethodNameNotFoundInInheritanceHierarchy",
-	'method "foo" is not defined in class "Foo"');
+        'method "foo" is not defined in class "Foo"');
 
     is(
-	$exception->class->name,
-	'Foo',
-	'method "foo" is not defined in class "Foo"');
+        $exception->class_name,
+        'Foo',
+        'method "foo" is not defined in class "Foo"');
 
    is(
-	$exception->method_name,
-	'foo',
-	'method "foo" is not defined in class "Foo"');
+        $exception->method_name,
+        'foo',
+        'method "foo" is not defined in class "Foo"');
 }
 
 {
     {
-	package Bar;
-	use Moose;
+        package Bar;
+        use Moose;
     }
     my $bar = Bar->new;
     my $class = Class::MOP::Class->create("Foo");
     my $exception =  exception {
-	$class->new_object( ( __INSTANCE__ => $bar ) );
+        $class->new_object( ( __INSTANCE__ => $bar ) );
     };
 
     like(
         $exception,
         qr/\QObjects passed as the __INSTANCE__ parameter must already be blessed into the correct class, but $bar is not a Foo/,
-	"__INSTANCE__ is not blessed correctly");
+        "__INSTANCE__ is not blessed correctly");
         #Objects passed as the __INSTANCE__ parameter must already be blessed into the correct class, but Bar=HASH(0x2d77528) is not a Foo
 
     isa_ok(
         $exception,
         "Moose::Exception::InstanceBlessedIntoWrongClass",
-	"__INSTANCE__ is not blessed correctly");
+        "__INSTANCE__ is not blessed correctly");
 
     is(
-	$exception->class->name,
-	'Foo',
-	"__INSTANCE__ is not blessed correctly");
+        $exception->class_name,
+        'Foo',
+        "__INSTANCE__ is not blessed correctly");
 
    is(
-	$exception->instance,
-	$bar,
-	"__INSTANCE__ is not blessed correctly");
+        $exception->instance,
+        $bar,
+        "__INSTANCE__ is not blessed correctly");
 }
 
 {
     my $class = Class::MOP::Class->create("Foo");
     my $array = [1,2,3];
     my $exception =  exception {
-	$class->new_object( ( __INSTANCE__ => $array ) );
+        $class->new_object( ( __INSTANCE__ => $array ) );
     };
 
     like(
         $exception,
         qr/\QThe __INSTANCE__ parameter must be a blessed reference, not $array/,
-	"__INSTANCE__ is not a blessed reference");
+        "__INSTANCE__ is not a blessed reference");
         #The __INSTANCE__ parameter must be a blessed reference, not ARRAY(0x1d75d40)
 
     isa_ok(
         $exception,
         "Moose::Exception::InstanceMustBeABlessedReference",
-	"__INSTANCE__ is not a blessed reference");
+        "__INSTANCE__ is not a blessed reference");
 
     is(
-	$exception->class->name,
-	'Foo',
-	"__INSTANCE__ is not a blessed reference");
+        $exception->class_name,
+        'Foo',
+        "__INSTANCE__ is not a blessed reference");
 
    is(
-	$exception->instance,
-	$array,
-	"__INSTANCE__ is not a blessed reference");
+        $exception->instance,
+        $array,
+        "__INSTANCE__ is not a blessed reference");
 }
 
 {
     my $array = [1, 2, 3];
     my $class = Class::MOP::Class->create("Foo");
     my $exception =  exception {
-	$class->_clone_instance($array);
+        $class->_clone_instance($array);
     };
 
     like(
         $exception,
         qr/\QYou can only clone instances, ($array) is not a blessed instance/,
-	"array reference was passed to _clone_instance instead of a blessed instance");
+        "array reference was passed to _clone_instance instead of a blessed instance");
         #You can only clone instances, (ARRAY(0x2162350)) is not a blessed instance
 
     isa_ok(
         $exception,
         "Moose::Exception::OnlyInstancesCanBeCloned",
-	"array reference was passed to _clone_instance instead of a blessed instance");
+        "array reference was passed to _clone_instance instead of a blessed instance");
 
     is(
-	$exception->class->name,
-	"Foo",
-	"array reference was passed to _clone_instance instead of a blessed instance");
+        $exception->class_name,
+        "Foo",
+        "array reference was passed to _clone_instance instead of a blessed instance");
 
     is(
-	$exception->instance,
-	$array,
-	"array reference was passed to _clone_instance instead of a blessed instance");
+        $exception->instance,
+        $array,
+        "array reference was passed to _clone_instance instead of a blessed instance");
 }
 
 {
@@ -481,7 +480,7 @@ use Moose();
         "Trying to inherit a Role");
 
     is(
-        $exception->class->name,
+        $exception->class_name,
         "My::Class",
         "Trying to inherit a Role");
 
@@ -515,7 +514,7 @@ use Moose();
         "immutable_trait set to undef");
 
     is(
-        $exception->class->name,
+        $exception->class_name,
         "TestClass",
         "immutable_trait set to undef");
 }
@@ -539,7 +538,7 @@ use Moose();
         "destructor_class is set to undef");
 
     is(
-        $exception->class->name,
+        $exception->class_name,
         "NoDestructorClass",
         "destructor_class is set to undef");
 }
@@ -577,7 +576,7 @@ use Moose();
             push(@superclasses, 'Foo9::SuperClass::After::Attribute');
 
             extends @superclasses;
-	}
+        }
     };
 
     like(
@@ -591,7 +590,7 @@ use Moose();
         "cannot make metaclass compatible");
 
     is(
-        $exception->class->name,
+        $exception->class_name,
         "Foo9",
         "cannot make metaclass compatible");
 }
@@ -641,7 +640,7 @@ use Moose();
             "cannot make metaclass compatible");
 
         is(
-            $exception->class->name,
+            $exception->class_name,
             "Foo::Unsafe::Sub",
             "cannot make metaclass compatible");
     }
@@ -654,7 +653,7 @@ use Moose();
                 attribute_metaclass => "Foo::Meta::Attribute",
                 attribute_metaclass => "Bar::Meta::Attribute",
             )
-	};
+        };
 
         like(
             $exception,
@@ -667,7 +666,7 @@ use Moose();
             "incompatible attribute_metaclass");
 
         is(
-            $exception->class->name,
+            $exception->class_name,
             "Foo::All::Sub::Attribute",
             "incompatible attribute_metaclass");
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -58,18 +57,18 @@ use Moose();
 {
     my $attr = Class::MOP::Attribute->new("Foo", ( is => 'ro'));
     my $exception = exception {
-	Class::MOP::Method::Accessor->new( accessor_type => "reader", attribute => $attr);
+        Class::MOP::Method::Accessor->new( accessor_type => "reader", attribute => $attr);
     };
 
     like(
         $exception,
         qr/\QYou must supply the package_name and name parameters/,
-	"no package_name and name is given");
+        "no package_name and name is given");
 
     isa_ok(
         $exception,
         "Moose::Exception::MustSupplyPackageNameAndName",
-	"no package_name and name is given");
+        "no package_name and name is given");
 }
 
 {
@@ -82,17 +81,17 @@ use Moose();
     like(
         $exception,
         qr/\QCould not generate inline accessor because : Can't call method "get_meta_instance" on an undefined value/,
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 
     isa_ok(
         $exception,
         "Moose::Exception::CouldNotGenerateInlineAttributeMethod",
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 
     is(
         $exception->option,
         "accessor",
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 }
 
 {
@@ -105,17 +104,17 @@ use Moose();
     like(
         $exception,
         qr/\QCould not generate inline reader because : Can't call method "get_meta_instance" on an undefined value/,
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 
     isa_ok(
         $exception,
         "Moose::Exception::CouldNotGenerateInlineAttributeMethod",
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 
     is(
         $exception->option,
         "reader",
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 }
 
 {
@@ -128,17 +127,17 @@ use Moose();
     like(
         $exception,
         qr/\QCould not generate inline writer because : Can't call method "get_meta_instance" on an undefined value/,
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 
     isa_ok(
         $exception,
         "Moose::Exception::CouldNotGenerateInlineAttributeMethod",
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 
     is(
         $exception->option,
         "writer",
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 }
 
 {
@@ -151,17 +150,17 @@ use Moose();
     like(
         $exception,
         qr/\QCould not generate inline predicate because : Can't call method "get_meta_instance" on an undefined value/,
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 
     isa_ok(
         $exception,
         "Moose::Exception::CouldNotGenerateInlineAttributeMethod",
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 
     is(
         $exception->option,
         "predicate",
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 }
 
 {
@@ -174,17 +173,17 @@ use Moose();
     like(
         $exception,
         qr/\QCould not generate inline clearer because : Can't call method "get_meta_instance" on an undefined value/,
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 
     isa_ok(
         $exception,
         "Moose::Exception::CouldNotGenerateInlineAttributeMethod",
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 
     is(
         $exception->option,
         "clearer",
-	"can't call get_meta_instance on an undefined value");
+        "can't call get_meta_instance on an undefined value");
 }
 
 {
@@ -195,7 +194,7 @@ use Moose();
         has 'foo' => (
             is       => 'ro',
             isa      => 'Int',
-	);
+        );
     }
 
     my $foo = Foo::ReadOnlyAccessor->new;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -31,12 +30,12 @@ use Moose();
     like(
         $exception,
         qr/\QYou must supply the package_name and name parameters/,
-	"no package_name and name is given");
+        "no package_name and name is given");
 
     isa_ok(
         $exception,
         "Moose::Exception::MustSupplyPackageNameAndName",
-	"no package_name and name is given");
+        "no package_name and name is given");
 }
 
 {
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -15,12 +14,12 @@ use Moose();
     like(
         $exception,
         qr/\QOverriding the body of meta methods is not allowed/,
-	"body is given to Class::MOP::Method::Meta->wrap");
+        "body is given to Class::MOP::Method::Meta->wrap");
 
     isa_ok(
         $exception,
         "Moose::Exception::CannotOverrideBodyOfMetaMethods",
-	"body is given to Class::MOP::Method::Meta->wrap");
+        "body is given to Class::MOP::Method::Meta->wrap");
 }
 
 done_testing;
@@ -1,26 +0,0 @@
-
-use strict;
-use warnings;
-
-use Test::More;
-use Test::Fatal;
-
-use Moose();
-
-{
-    my $exception = exception {
-        Class::MOP::Method::Overload->wrap("Foo");
-    };
-
-    like(
-        $exception,
-        qr/\Qoperator is required/,
-        "no operator is given to Class::MOP::Method::Overload::wrap");
-
-    isa_ok(
-        $exception,
-        "Moose::Exception::OperatorIsRequired",
-        "no operator is given to Class::MOP::Method::Overload::wrap");
-}
-
-done_testing;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -9,34 +8,34 @@ use Moose();
 
 {
     my $exception =  exception {
-	Class::MOP::Method->wrap( "foo", ( name => "Bar"));
+        Class::MOP::Method->wrap( "foo", ( name => "Bar"));
     };
 
     like(
         $exception,
         qr/\QYou must supply a CODE reference to bless, not (foo)/,
-	"first argument to wrap should be a CODE ref");
+        "first argument to wrap should be a CODE ref");
 
     isa_ok(
         $exception,
         "Moose::Exception::WrapTakesACodeRefToBless",
-	"first argument to wrap should be a CODE ref");
+        "first argument to wrap should be a CODE ref");
 }
 
 {
     my $exception =  exception {
-	Class::MOP::Method->wrap( sub { "foo" }, ());
+        Class::MOP::Method->wrap( sub { "foo" }, ());
     };
 
     like(
         $exception,
         qr/You must supply the package_name and name parameters/,
-	"no package name is given to wrap");
+        "no package name is given to wrap");
 
     isa_ok(
         $exception,
         "Moose::Exception::PackageNameAndNameParamsNotGivenToWrap",
-	"no package name is given to wrap");
+        "no package name is given to wrap");
 }
 
 done_testing;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -22,78 +21,78 @@ use Moose();
     isa_ok(
         $exception,
         "Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass",
-	"an Array ref blessed into Bar is given to create");
+        "an Array ref blessed into Bar is given to create");
 
     is(
-	$exception->attribute,
-	$xyz,
-	"an Array ref blessed into Bar is given to create");
+        $exception->attribute,
+        $xyz,
+        "an Array ref blessed into Bar is given to create");
 }
 
 {
     my $class = Class::MOP::Class->create("Foo");
     my $exception = exception {
-	$class->has_attribute;
+        $class->has_attribute;
     };
 
     like(
         $exception,
         qr/You must define an attribute name/,
-	"attribute name is not given");
+        "attribute name is not given");
 
     isa_ok(
         $exception,
         "Moose::Exception::MustDefineAnAttributeName",
-	"attribute name is not given");
+        "attribute name is not given");
 
     is(
-	$exception->class,
-	$class,
-	"attribute name is not given");
+        $exception->class_name,
+        'Foo',
+        "attribute name is not given");
 }
 
 {
     my $class = Class::MOP::Class->create("Foo");
     my $exception = exception {
-	$class->get_attribute;
+        $class->get_attribute;
     };
 
     like(
         $exception,
         qr/You must define an attribute name/,
-	"attribute name is not given");
+        "attribute name is not given");
 
     isa_ok(
         $exception,
         "Moose::Exception::MustDefineAnAttributeName",
-	"attribute name is not given");
+        "attribute name is not given");
 
     is(
-	$exception->class,
-	$class,
-	"attribute name is not given");
+        $exception->class_name,
+        "Foo",
+        "attribute name is not given");
 }
 
 {
     my $class = Class::MOP::Class->create("Foo");
     my $exception = exception {
-	$class->remove_attribute;
+        $class->remove_attribute;
     };
 
     like(
         $exception,
         qr/You must define an attribute name/,
-	"attribute name is not given");
+        "attribute name is not given");
 
     isa_ok(
         $exception,
         "Moose::Exception::MustDefineAnAttributeName",
-	"attribute name is not given");
+        "attribute name is not given");
 
     is(
-	$exception->class,
-	$class,
-	"attribute name is not given");
+        $exception->class_name,
+        "Foo",
+        "attribute name is not given");
 }
 
 done_testing;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -8,6 +7,7 @@ use Test::Fatal;
 {
     my $exception = exception {
         use Moose ();
+        # XXX call cmop version of throw_error here instead!
         Moose->throw_error("Hello, I am an exception object");
     };
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -48,7 +47,7 @@ use Test::Fatal;
         "add_role takes an instance of Moose::Meta::Role");
 
     is(
-        $exception->class->name,
+        $exception->class_name,
         'Foo',
         "add_role to Moose::Meta::Role takes instances of Moose::Meta::Role");
 
@@ -100,7 +99,7 @@ use Test::Fatal;
         "Cannot call does_role without a role name");
 
     is(
-        $exception->class->name,
+        $exception->class_name,
         'Foo',
         "Cannot call does_role without a role name");
 }
@@ -129,7 +128,7 @@ use Test::Fatal;
         "Cannot call excludes_role without a role name");
 
     is(
-        $exception->class->name,
+        $exception->class_name,
         'Foo',
         "Cannot call excludes_role without a role name");
 }
@@ -155,22 +154,20 @@ use Test::Fatal;
 
 # tests for AttributeIsRequired for inline excpetions
 {
-    use Moose::Meta::Class;
-
     {
         package Foo2;
         use Moose;
 
         has 'baz' => (
-	    is       => 'ro',
-	    isa      => 'Int',
-	    required => 1,
+            is       => 'ro',
+            isa      => 'Int',
+            required => 1,
         );
         __PACKAGE__->meta->make_immutable;
     }
 
     my $exception = exception {
-	my $test1 = Foo2->new;
+        my $test1 = Foo2->new;
     };
 
     like(
@@ -184,7 +181,7 @@ use Test::Fatal;
         "... must supply all the required attribute");
 
     is(
-        $exception->attribute->name,
+        $exception->attribute_name,
         'baz',
         "... must supply all the required attribute");
 
@@ -217,17 +214,17 @@ use Test::Fatal;
         "Class cannot extend a role");
 
     is(
-	$exception->role->name,
-	'Bar',
-	"Class cannot extend a role");
+        $exception->role_name,
+        'Bar',
+        "Class cannot extend a role");
 }
 
 {
     my $exception = exception {
-	package Foo;
-	use Moose;
-	sub foo2 {}
-	override foo2 => sub {};
+        package Foo;
+        use Moose;
+        sub foo2 {}
+        override foo2 => sub {};
     };
 
     like(
@@ -241,22 +238,22 @@ use Test::Fatal;
         "there is already a method named foo2 defined in the class, so you can't override it");
 
     is(
-	$exception->class->name,
-	'Foo',
+        $exception->class_name,
+        'Foo',
         "there is already a method named foo2 defined in the class, so you can't override it");
 
     is(
-	$exception->method->name,
-	'foo2',
+        $exception->method->name,
+        'foo2',
         "there is already a method named foo2 defined in the class, so you can't override it");
 }
 
 {
     my $exception = exception {
-	package Foo;
-	use Moose;
-	sub foo {}
-	augment foo => sub {};
+        package Foo;
+        use Moose;
+        sub foo {}
+        augment foo => sub {};
     };
 
     like(
@@ -270,38 +267,38 @@ use Test::Fatal;
         "there is already a method named foo defined in the class");
 
     is(
-	$exception->class->name,
-	'Foo',
+        $exception->class_name,
+        'Foo',
         "there is already a method named foo defined in the class");
 
     is(
-	$exception->method->name,
-	'foo',
+        $exception->method->name,
+        'foo',
         "there is already a method named foo defined in the class");
 }
 
 {
     {
-	package Test;
-	use Moose;
+        package Test;
+        use Moose;
     }
 
     my $exception = exception {
-	package Test2;
-	use Moose;
-	extends 'Test';
-	has '+bar' => ( default => 100 );
+        package Test2;
+        use Moose;
+        extends 'Test';
+        has '+bar' => ( default => 100 );
     };
 
     like(
-	$exception,
-	qr/Could not find an attribute by the name of 'bar' to inherit from in Test2/,
-	"attribute 'bar' is not defined in the super class");
+        $exception,
+        qr/Could not find an attribute by the name of 'bar' to inherit from in Test2/,
+        "attribute 'bar' is not defined in the super class");
 
     isa_ok(
-	$exception,
-	"Moose::Exception::NoAttributeFoundInSuperClass",
-	"attribute 'bar' is not defined in the super class");
+        $exception,
+        "Moose::Exception::NoAttributeFoundInSuperClass",
+        "attribute 'bar' is not defined in the super class");
 }
 
 done_testing;
@@ -0,0 +1,20 @@
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Fatal;
+
+use Class::MOP;
+
+{
+    my $exception = exception {
+        Class::MOP::Mixin->_throw_exception(Legacy => message => 'oh hai');
+    };
+    ok(
+        $exception->isa('Moose::Exception::Legacy'),
+        'threw the right type',
+    );
+    is($exception->message, 'oh hai', 'got the message attribute');
+}
+
+done_testing;
@@ -1,154 +0,0 @@
-
-use strict;
-use warnings;
-
-use Test::More;
-use Test::Fatal;
-
-use Moose::Util 'throw_exception';
-
-{
-    {
-        package TestClass;
-        use Moose;
-
-        has 'foo' => (
-            is       => 'ro',
-            isa      => 'Int',
-            required => 1
-        );
-    }
-
-    my $exception = exception {
-        throw_exception( AttributeIsRequired => attribute_name => 'foo' );
-    };
-
-    like(
-        $exception,
-        qr/You need to give class or class_name or both/,
-        "please give either class or class_name");
-
-    isa_ok(
-        $exception,
-        "Moose::Exception::NeitherClassNorClassNameIsGiven",
-        "please give either class or class_name");
-
-    $exception = exception {
-        throw_exception( AttributeIsRequired => class_name => 'TestClass' );
-    };
-
-    like(
-        $exception,
-        qr/You need to give attribute or attribute_name or both/,
-        "please give either attribute or attribute_name");
-
-    isa_ok(
-        $exception,
-        "Moose::Exception::NeitherAttributeNorAttributeNameIsGiven",
-        "please give either class or class_name");
-
-    $exception = exception {
-        throw_exception( AttributeIsRequired => attribute_name => 'foo1',
-                                                attribute      => TestClass->meta->get_attribute("foo")
-                       );
-    };
-
-    like(
-        $exception,
-        qr/\Qattribute_name (foo1) does not match attribute->name (foo)/,
-        "attribute->name & attribute_name do not match");
-
-    isa_ok(
-        $exception,
-        "Moose::Exception::AttributeNamesDoNotMatch",
-        "attribute->name & attribute_name do not match");
-
-    is(
-        $exception->attribute_name,
-        "foo1",
-        "attribute->name & attribute_name do not match");
-
-    is(
-        $exception->attribute->name,
-        "foo",
-        "attribute->name & attribute_name do not match");
-
-    $exception = exception {
-        throw_exception( AttributeIsRequired => attribute => TestClass->meta->get_attribute("foo")
-                       );
-    };
-
-    like(
-        $exception,
-        qr/\QAttribute (foo) is required/,
-        "since, attribute is given, so we should get AttributeIsRequired");
-
-    isa_ok(
-        $exception,
-        "Moose::Exception::AttributeIsRequired",
-        "since, attribute is given, so we should get AttributeIsRequired");
-
-    is(
-        $exception->attribute_name,
-        "foo",
-        "since, attribute is given, so we should get AttributeIsRequired");
-
-    is(
-        $exception->attribute->name,
-        "foo",
-        "since, attribute is given, so we should get AttributeIsRequired");
-
-    is(
-        $exception->class_name,
-        "TestClass",
-        "since, attribute is given, so we should get AttributeIsRequired");
-
-    is(
-        $exception->class,
-        TestClass->meta,
-        "since, attribute is given, so we should get AttributeIsRequired");
-
-    $exception = exception {
-        throw_exception( AttributeIsRequired => class_name => 'TestClass1',
-                                                class      => TestClass->meta
-                       );
-    };
-
-    like(
-        $exception,
-        qr/You need to give attribute or attribute_name or both/,
-        "neither attribute, nor attribute_mame is given");
-
-    isa_ok(
-        $exception,
-        "Moose::Exception::NeitherAttributeNorAttributeNameIsGiven",
-        "neither attribute, nor attribute_mame is given");
-
-    $exception = exception {
-        throw_exception( AttributeIsRequired => attribute  => TestClass->meta->get_attribute("foo"),
-                                                class_name => "TestClass1"
-                       );
-    };
-
-    like(
-        $exception,
-        qr/\Qclass_name (TestClass1) does not match class->name (TestClass)/,
-        "class names do not match");
-
-    isa_ok(
-        $exception,
-        "Moose::Exception::ClassNamesDoNotMatch",
-        "class names do not match");
-
-    is(
-        $exception->class_name,
-        "TestClass1",
-        "class names do not match");
-
-    is(
-        $exception->class,
-        TestClass->meta,
-        "class names do not match");
-}
-
-done_testing;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -30,7 +29,7 @@ use Moose::Util 'throw_exception';
     like(
         $exception,
         qr/\Qattribute_name (foo) does not match attribute->name (bar)/,
-	"you have given attribute_name as 'foo' and attribute->name as 'bar'");
+        "you have given attribute_name as 'foo' and attribute->name as 'bar'");
 
     isa_ok(
         $exception,
@@ -1,104 +0,0 @@
-
-use strict;
-use warnings;
-
-use Test::More;
-use Test::Fatal;
-
-{
-    {
-	package DoesClassRole;
-	use Moose;
-	extends 'Moose::Exception';
-	with 'Moose::Exception::Role::Class';
-    }
-
-    my $exception = exception {
-	my $doesClassRole = DoesClassRole->new;
-    };
-
-    like(
-        $exception,
-        qr/\QYou need to give class or class_name or both/,
-	"please give either class or class_name");
-
-    isa_ok(
-        $exception,
-        "Moose::Exception::NeitherClassNorClassNameIsGiven",
-        "please give either class or class_name");
-
-    {
-	package JustATestClass;
-	use Moose;
-    }
-
-    $exception = DoesClassRole->new( class => JustATestClass->meta );
-
-    ok( !$exception->is_class_name_set, "class_name is not set");
-
-    is(
-	$exception->class->name,
-	"JustATestClass",
-	"you have given class");
-
-    is(
-	$exception->class_name,
-	"JustATestClass",
-	"you have given class");
-
-    $exception = DoesClassRole->new( class_name => "JustATestClass" );
-
-    ok( !$exception->is_class_set, "class is not set");
-
-    is(
-	$exception->class_name,
-	"JustATestClass",
-	"you have given class");
-
-    is(
-	$exception->class->name,
-	"JustATestClass",
-	"you have given class");
-
-    $exception = DoesClassRole->new( class_name => "DoesClassRole",
-				     class      => DoesClassRole->meta
-                                   );
-
-    is(
-	$exception->class_name,
-	"DoesClassRole",
-	"you have given both, class & class_name");
-
-    is(
-	$exception->class->name,
-	"DoesClassRole",
-	"you have given both, class & class_name");
-
-    $exception = exception {
-        DoesClassRole->new( class_name => "Foo",
-                            class      => DoesClassRole->meta,
-                          );
-    };
-
-    like(
-        $exception,
-        qr/\Qclass_name (Foo) does not match class->name (DoesClassRole)/,
-	"you have given class_name as 'Foo' and class->name as 'DoesClassRole'");
-
-    isa_ok(
-        $exception,
-        "Moose::Exception::ClassNamesDoNotMatch",
-        "you have given class_name as 'Foo' and class->name as 'DoesClassRole'");
-
-    is(
-	$exception->class_name,
-	"Foo",
-	"you have given class_name as 'Foo' and class->name as 'DoesClassRole'");
-
-    is(
-	$exception->class->name,
-	"DoesClassRole",
-	"you have given class_name as 'Foo' and class->name as 'DoesClassRole'");
-}
-
-done_testing;
@@ -1,104 +0,0 @@
-
-use strict;
-use warnings;
-
-use Test::More;
-use Test::Fatal;
-
-{
-    {
-        package DoesRoleRole;
-        use Moose;
-        extends 'Moose::Exception';
-        with 'Moose::Exception::Role::Role';
-    }
-
-    my $exception = exception {
-        my $doesRoleRole = DoesRoleRole->new;
-    };
-
-    like(
-        $exception,
-        qr/\QYou need to give role or role_name or both/,
-        "please give either role or role_name");
-
-    isa_ok(
-        $exception,
-        "Moose::Exception::NeitherRoleNorRoleNameIsGiven",
-        "please give either role or role_name");
-
-    {
-        package JustATestRole;
-        use Moose::Role;
-    }
-
-    $exception = DoesRoleRole->new( role => JustATestRole->meta );
-
-    ok( !$exception->is_role_name_set, "role_name is not set");
-
-    is(
-        $exception->role->name,
-        "JustATestRole",
-        "you have given role");
-
-    is(
-        $exception->role_name,
-        "JustATestRole",
-        "you have given role");
-
-    $exception = DoesRoleRole->new( role_name => "JustATestRole" );
-
-    ok( !$exception->is_role_set, "role is not set");
-
-    is(
-        $exception->role_name,
-        "JustATestRole",
-        "you have given role");
-
-    is(
-        $exception->role->name,
-        "JustATestRole",
-        "you have given role");
-
-    $exception = DoesRoleRole->new( role_name => "JustATestRole",
-                                    role      => JustATestRole->meta
-                                  );
-
-    is(
-        $exception->role_name,
-        "JustATestRole",
-        "you have given both, role & role_name");
-
-    is(
-        $exception->role->name,
-        "JustATestRole",
-        "you have given both, role & role_name");
-
-    $exception = exception {
-        DoesRoleRole->new( role_name => "Foo",
-                           role      => JustATestRole->meta,
-                         );
-    };
-
-    like(
-        $exception,
-        qr/\Qrole_name (Foo) does not match role->name (JustATestRole)/,
-        "you have given role_name as 'Foo' and role->name as 'JustATestRole'");
-
-    isa_ok(
-        $exception,
-        "Moose::Exception::RoleNamesDoNotMatch",
-        "you have given role_name as 'Foo' and role->name as 'JustATestRole'");
-
-    is(
-        $exception->role_name,
-        "Foo",
-        "you have given role_name as 'Foo' and role->name as 'JustATestRole'");
-
-    is(
-        $exception->role->name,
-        "JustATestRole",
-        "you have given role_name as 'Foo' and role->name as 'JustATestRole'");
-}
-
-done_testing;
@@ -1,101 +0,0 @@
-
-use strict;
-use warnings;
-
-use Test::More;
-use Test::Fatal;
-
-{
-    {
-	package DoesTypeConstraintRole;
-	use Moose;
-	extends 'Moose::Exception';
-	with 'Moose::Exception::Role::TypeConstraint';
-    }
-
-    my $exception = exception {
-	my $doesTypeConstraintRole = DoesTypeConstraintRole->new;
-    };
-
-    like(
-        $exception,
-        qr/\QYou need to give type or type_name or both/,
-	"please give either type or type_name");
-
-    isa_ok(
-        $exception,
-        "Moose::Exception::NeitherTypeNorTypeNameIsGiven",
-	"please give either type or type_name");
-
-    my $type = Moose::Util::TypeConstraints::find_or_create_isa_type_constraint("foo");
-    $exception = DoesTypeConstraintRole->new( type => $type );
-
-    ok( !$exception->is_type_name_set, "type_name is not set");
-
-    is(
-    	$exception->type->name,
-    	"foo",
-    	"you have given type");
-
-    is(
-    	$exception->type_name,
-    	"foo",
-    	"you have given type");
-
-
-    $exception = DoesTypeConstraintRole->new( type_name => "foo" );
-
-    ok( !$exception->is_type_set, "type is not set");
-
-    is(
-    	$exception->type_name,
-    	"foo",
-    	"you have given type");
-
-    is(
-    	$exception->type->name,
-    	"foo",
-    	"you have given type");
-
-    $exception = DoesTypeConstraintRole->new( type_name => "foo",
-    				     type      => $type
-                                   );
-
-    is(
-    	$exception->type_name,
-    	"foo",
-    	"you have given both, type & type_name");
-
-    is(
-    	$exception->type->name,
-    	"foo",
-    	"you have given both, type & type_name");
-
-    $exception = exception {
-        DoesTypeConstraintRole->new( type_name => "foo",
-                                     type      => Moose::Util::TypeConstraints::find_or_create_isa_type_constraint("bar"),
-                          );
-    };
-
-    like(
-        $exception,
-        qr/\Qtype_name (foo) does not match type->name (bar)/,
-    	"you have given type_name as 'foo' and type->name as 'bar'");
-
-    isa_ok(
-        $exception,
-        "Moose::Exception::TypeNamesDoNotMatch",
-        "you have given type_name as 'foo' and type->name as 'bar'");
-
-    is(
-    	$exception->type_name,
-    	"foo",
-    	"you have given type_name as 'foo' and type->name as 'bar'");
-
-    is(
-    	$exception->type->name,
-    	"bar",
-    	"you have given type_name as 'foo' and type->name as 'bar'");
-}
-
-done_testing;
@@ -0,0 +1,23 @@
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Fatal;
+use Test::Requires 'Test::Memory::Cycle';
+
+BEGIN {
+    plan skip_all => 'Leak tests fail under Devel::Cover' if $INC{'Devel/Cover.pm'};
+}
+
+{
+    package Foo;
+    use Moose;
+    has myattr => ( is => 'ro', required => 1 );
+}
+
+memory_cycle_ok(
+    exception { Foo->new() },
+    'exception objects do not leak arguments into Devel::StackTrace objects',
+);
+
+done_testing;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -32,7 +31,7 @@ use Test::Fatal;
         "Roles cannot have a class as an attribute");
 
     is(
-        $exception->role->name,
+        $exception->role_name,
         'JustATestRole',
         "Roles cannot have a class as an attribute");
 
@@ -63,7 +62,7 @@ use Test::Fatal;
         "Attribute Extension is not supported in roles");
 
     is(
-        $exception->role->name,
+        $exception->role_name,
         'JustATestRole',
         "Attribute Extension is not supported in roles");
 
@@ -94,7 +93,7 @@ use Test::Fatal;
         "Cannot override bar, because it's a local method");
 
     is(
-        $exception->role->name,
+        $exception->role_name,
         'JustATestRole',
         "Cannot override bar, because it's a local method");
 
@@ -125,7 +124,7 @@ use Test::Fatal;
         "add_role to Moose::Meta::Role takes instances of Moose::Meta::Role");
 
     is(
-        $exception->role->name,
+        $exception->role_name,
         'JustATestRole',
         "add_role to Moose::Meta::Role takes instances of Moose::Meta::Role");
 
@@ -156,7 +155,7 @@ use Test::Fatal;
         "Cannot call does_role without a role name");
 
     is(
-        $exception->role->name,
+        $exception->role_name,
         'Bar',
         "Cannot call does_role without a role name");
 }
@@ -182,7 +181,7 @@ use Test::Fatal;
         "apply takes a blessed instance");
 
     is(
-        $exception->role->name,
+        $exception->role_name,
         'Bar',
         "apply takes a blessed instance");
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -40,7 +39,7 @@ use Test::Fatal;
             Moose::Exporter->setup_import_methods(
                 also => [ 'Moose', 'MooseX::CircularAlso' ],
             );
-	}
+        }
     };
 
     like(
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -12,8 +11,8 @@ use Moose();
         package Foo;
         use Moose;
 
-	__PACKAGE__->meta->make_immutable;
-	Foo->meta->does_role;
+        __PACKAGE__->meta->make_immutable;
+        Foo->meta->does_role;
     };
 
     like(
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -12,11 +11,11 @@ use Moose();
     use Moose;
 
     has 'foo' => (
-	is       => 'ro',
-	isa      => 'ArrayRef',
-	traits   => ['Array'],
-	handles  => {
-	    get           => 'get',
+        is       => 'ro',
+        isa      => 'ArrayRef',
+        traits   => ['Array'],
+        handles  => {
+            get           => 'get',
             first         => 'first',
             first_index   => 'first_index',
             grep          => 'grep',
@@ -27,9 +26,9 @@ use Moose();
             sort          => 'sort',
             sort_in_place => 'sort_in_place',
             splice        => 'splice'
-	},
-	required => 1
-	);
+        },
+        required => 1
+    );
 }
 
 my $foo_obj;
@@ -58,7 +57,7 @@ my $foo_obj;
 
     is(
         $exception->method_name,
-	"get",
+        "get",
         "get takes integer argument");
 }
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -12,11 +11,11 @@ use Moose();
     use Moose;
 
     has 'foo' => (
-	is      => 'rw',
-	isa     => 'ArrayRef[Int]',
-	traits  => ['Array'],
-	handles => { push => 'push'}
-	);
+        is      => 'rw',
+        isa     => 'ArrayRef[Int]',
+        traits  => ['Array'],
+        handles => { push => 'push'}
+        );
 }
 
 my $bar_obj = Bar->new;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -12,14 +11,14 @@ use Moose();
     use Moose;
 
     has 'foo' => (
-	is      => 'ro',
-	isa     => 'Str',
-	traits  => ['String'],
-	handles => {
+        is      => 'ro',
+        isa     => 'Str',
+        traits  => ['String'],
+        handles => {
             match   => 'match'
-	},
-	required => 1
-	);
+        },
+        required => 1
+        );
 }
 
 my $foo_obj = Foo->new( foo => 'hello' );
@@ -52,7 +51,7 @@ my $foo_obj = Foo->new( foo => 'hello' );
 
     is(
         $exception->method_name,
-	"match",
+        "match",
         "an Array Ref passed to match");
 
     is(
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -12,14 +11,14 @@ use Moose();
     use Moose;
 
     has 'foo' => (
-	is      => 'ro',
-	isa     => 'Str',
-	traits  => ['String'],
-	handles => {
+        is      => 'ro',
+        isa     => 'Str',
+        traits  => ['String'],
+        handles => {
             replace => 'replace'
         },
-	required => 1
-	);
+        required => 1
+        );
 }
 
 my $foo_obj = Foo->new( foo => 'hello' );
@@ -57,7 +56,7 @@ my $foo_obj = Foo->new( foo => 'hello' );
 
     is(
         $exception->method_name,
-	"replace",
+        "replace",
         "an Array ref passed to replace");
 
     is(
@@ -99,7 +98,7 @@ my $foo_obj = Foo->new( foo => 'hello' );
 
     is(
         $exception->method_name,
-	"replace",
+        "replace",
         "an Array ref passed to replace");
 
     is(
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -12,14 +11,14 @@ use Moose();
     use Moose;
 
     has 'foo' => (
-	is      => 'ro',
-	isa     => 'Str',
-	traits  => ['String'],
-	handles => {
+        is      => 'ro',
+        isa     => 'Str',
+        traits  => ['String'],
+        handles => {
             substr => 'substr'
         },
-	required => 1
-	);
+        required => 1
+        );
 }
 
 my $foo_obj = Foo->new( foo => 'hello' );
@@ -56,7 +55,7 @@ my $foo_obj = Foo->new( foo => 'hello' );
 
     is(
         $exception->method_name,
-	"substr",
+        "substr",
         "substr takes integer as its first argument");
 
     is(
@@ -97,7 +96,7 @@ my $foo_obj = Foo->new( foo => 'hello' );
 
     is(
         $exception->method_name,
-	"substr",
+        "substr",
         "substr takes integer as its second argument");
 
     is(
@@ -139,7 +138,7 @@ my $foo_obj = Foo->new( foo => 'hello' );
 
     is(
         $exception->method_name,
-	"substr",
+        "substr",
         "substr takes string as its third argument");
 
     is(
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -15,12 +14,12 @@ use Moose();
     like(
         $exception,
         qr/You must pass a hash of options/,
-	"options is not a HASH ref");
+        "options is not a HASH ref");
 
     isa_ok(
         $exception,
         "Moose::Exception::MustPassAHashOfOptions",
-	"options is not a HASH ref");
+        "options is not a HASH ref");
 }
 
 {
@@ -31,12 +30,12 @@ use Moose();
     like(
         $exception,
         qr/You must supply the package_name and name parameters/,
-	"package_name and name are not given");
+        "package_name and name are not given");
 
     isa_ok(
         $exception,
         "Moose::Exception::MustSupplyPackageNameAndName",
-	"package_name and name are not given");
+        "package_name and name are not given");
 }
 
 done_testing;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -77,10 +76,10 @@ use Moose();
     my $attr = Moose::Meta::Attribute->new("foo");
     my $exception = exception {
         Moose::Meta::Method::Delegation->new( attribute => $attr,
-					      package_name => "Foo",
-					      name => "Foo",
-					      delegate_to_method => sub {},
-					      curried_arguments => {} );
+                                              package_name => "Foo",
+                                              name => "Foo",
+                                              delegate_to_method => sub {},
+                                              curried_arguments => {} );
     };
 
     like(
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -15,12 +14,12 @@ use Moose();
     like(
         $exception,
         qr/You must pass a hash of options/,
-	"options is not a HASH ref");
+        "options is not a HASH ref");
 
     isa_ok(
         $exception,
         "Moose::Exception::MustPassAHashOfOptions",
-	"options is not a HASH ref");
+        "options is not a HASH ref");
 }
 
 {
@@ -31,12 +30,12 @@ use Moose();
     like(
         $exception,
         qr/You must supply the package_name and name parameters/,
-	"package_name and name are not given");
+        "package_name and name are not given");
 
     isa_ok(
         $exception,
         "Moose::Exception::MustSupplyPackageNameAndName",
-	"package_name and name are not given");
+        "package_name and name are not given");
 }
 
 {
@@ -47,17 +46,17 @@ use Moose();
     like(
         $exception,
         qr/The is_needed method expected a metaclass object as its arugment/,
-	"'foo' is not a metaclass");
+        "'foo' is not a metaclass");
 
     isa_ok(
         $exception,
         "Moose::Exception::MethodExpectedAMetaclassObject",
-	"'foo' is not a metaclass");
+        "'foo' is not a metaclass");
 
     is(
-	$exception->metaclass,
-	'foo',
-	"'foo' is not a metaclass");
+        $exception->metaclass,
+        'foo',
+        "'foo' is not a metaclass");
 }
 
 {
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -8,7 +7,7 @@ use Test::Fatal;
 {
     my $exception =  exception {
         package Foo;
-	use Moose;
+        use Moose;
 
         override foo => sub {}
     };
@@ -24,13 +23,13 @@ use Test::Fatal;
         "Foo class is not extending any class");
 
     is(
-	$exception->class,
-	"Moose::Meta::Method::Overridden",
+        $exception->class,
+        "Moose::Meta::Method::Overridden",
         "Foo class is not extending any class");
 
     is(
-	$exception->method_name,
-	"foo",
+        $exception->method_name,
+        "foo",
         "Foo class is not extending any class");
 }
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -115,7 +114,7 @@ use Moose();
         "role Foo2 & Bar2, both have an attribute named foo");
 
     is(
-        $exception->second_role->name,
+        $exception->second_role_name,
         "Bar2",
         "role Foo2 & Bar2, both have an attribute named foo");
 
@@ -192,7 +191,7 @@ use Moose();
 
     like(
         $exception,
-        qr/\QWe have encountered an 'override' method conflict during composition (Two 'override' methods of the same name encountered). This is fatal error./,
+        qr/\QWe have encountered an 'override' method conflict during composition (Two 'override' methods of the same name encountered). This is a fatal error./,
         "role Foo4 & Bar4, both are overriding the same method 'foo'");
 
     isa_ok(
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -7,6 +6,8 @@ use Test::Fatal;
 
 use Moose();
 
+use Moose::Util 'find_meta';
+
 {
     {
         package BarRole;
@@ -45,7 +46,7 @@ use Moose();
         'class FooClass excludes Role BarRole');
 
     is(
-        $exception->class,
+        find_meta($exception->class_name),
         FooClass->meta,
         'class FooClass excludes Role BarRole');
 
@@ -55,7 +56,7 @@ use Moose();
         'class FooClass excludes Role BarRole');
 
     is(
-        $exception->role,
+        find_meta($exception->role_name),
         BarRole->meta,
         'class FooClass excludes Role BarRole');
 }
@@ -98,17 +99,17 @@ use Moose();
         'Class FooClass2 does Role ExcludedRole2');
 
     is(
-        $exception->role,
+        find_meta($exception->role_name),
         BarRole2->meta,
         'Class FooClass2 does Role ExcludedRole2');
 
     is(
-        $exception->excluded_role->name,
+        $exception->excluded_role_name,
         "ExcludedRole2",
         'Class FooClass2 does Role ExcludedRole2');
 
     is(
-        $exception->excluded_role,
+        find_meta($exception->excluded_role_name),
         ExcludedRole2->meta,
         'Class FooClass2 does Role ExcludedRole2');
 
@@ -118,7 +119,7 @@ use Moose();
         'Class FooClass2 does Role ExcludedRole2');
 
     is(
-        $exception->class,
+        find_meta($exception->class_name),
         FooClass2->meta,
         'Class FooClass2 does Role ExcludedRole2');
 }
@@ -159,17 +160,17 @@ use Moose();
         "Class Bar5 already has a method named foo_in_bar");
 
     is(
-        $exception->role,
+        find_meta($exception->role_name),
         Foo5->meta,
         "Class Bar5 already has a method named foo_in_bar");
 
     is(
-        $exception->class->name,
+        $exception->class_name,
         "Bar5",
         "Class Bar5 already has a method named foo_in_bar");
 
     is(
-        $exception->class,
+        find_meta($exception->class_name),
         Bar5->meta,
         "Class Bar5 already has a method named foo_in_bar");
 
@@ -233,7 +234,7 @@ use Moose();
         'Foo::Role, Bar::Role & Baz::Role, all three has a method named foo');
 
     is(
-        $exception->class,
+        find_meta($exception->class_name),
         My::Foo::Class::Broken->meta,
         'Foo::Role, Bar::Role & Baz::Role, all three has a method named foo');
 
@@ -300,7 +301,7 @@ use Moose();
         'Foo2::Role, Bar2::Role & Baz2::Role, all three has a methods named foo & bar');
 
     is(
-        $exception->class,
+        find_meta($exception->class_name),
         My::Foo::Class::Broken2->meta,
         'Foo2::Role, Bar2::Role & Baz2::Role, all three has a methods named foo & bar');
 
@@ -353,7 +354,7 @@ use Moose();
         "foo is required by Foo3::Role, but it's not implemented by My::Foo::Class::Broken3");
 
     is(
-        $exception->class,
+        find_meta($exception->class_name),
         My::Foo::Class::Broken3->meta,
         "foo is required by Foo3::Role, but it's not implemented by My::Foo::Class::Broken3");
 
@@ -363,11 +364,6 @@ use Moose();
         "foo is required by Foo3::Role, but it's not implemented by My::Foo::Class::Broken3");
 
     is(
-        $exception->role->name,
-        'Foo3::Role|Bar3::Role|Baz3::Role',
-        "foo is required by Foo3::Role, but it's not implemented by My::Foo::Class::Broken3");
-
-    is(
         $exception->get_method_at(0)->name,
         "foo",
         "foo is required by Foo3::Role, but it's not implemented by My::Foo::Class::Broken3");
@@ -418,7 +414,7 @@ use Moose();
         "foo is required by Foo4::Role and imported by Class");
 
     is(
-        $exception->class,
+        find_meta($exception->class_name),
         Class->meta,
         "foo is required by Foo4::Role and imported by Class");
 
@@ -428,11 +424,6 @@ use Moose();
         "foo is required by Foo4::Role and imported by Class");
 
     is(
-        $exception->role->name,
-        'Foo4::Role',
-        "foo is required by Foo4::Role and imported by Class");
-
-    is(
         $exception->get_method_at(0)->name,
         "foo",
         "foo is required by Foo4::Role and imported by Class");
@@ -1,10 +1,11 @@
-
 use strict;
 use warnings;
 
 use Test::More;
 use Test::Fatal;
 
+use Moose::Util 'find_meta';
+
 use Moose();
 
 {
@@ -39,17 +40,17 @@ use Moose();
         'Role Foo excludes Role Bar');
 
     is(
-        $exception->role,
+        find_meta($exception->role_name),
         Foo->meta,
         'Role Foo excludes Role Bar');
 
     is(
-        $exception->excluded_role->name,
+        $exception->excluded_role_name,
         "Bar",
         'Role Foo excludes Role Bar');
 
     is(
-        $exception->excluded_role,
+        find_meta($exception->excluded_role_name),
         Bar->meta,
         'Role Foo excludes Role Bar');
 }
@@ -87,32 +88,32 @@ use Moose();
         'Role Bar2 does Role Bar3');
 
     is(
-        $exception->second_role->name,
+        $exception->second_role_name,
         "Foo2",
         'Role Bar2 does Role Bar3');
 
     is(
-        $exception->second_role,
+        find_meta($exception->second_role_name),
         Foo2->meta,
         'Role Bar2 does Role Bar3');
 
     is(
-        $exception->excluded_role->name,
+        $exception->excluded_role_name,
         "Bar3",
         'Role Bar2 does Role Bar3');
 
     is(
-        $exception->excluded_role,
+        find_meta($exception->excluded_role_name),
         Bar3->meta,
         'Role Bar2 does Role Bar3');
 
     is(
-        $exception->role->name,
+        $exception->role_name,
         "Bar2",
         'Role Bar2 does Role Bar3');
 
     is(
-        $exception->role,
+        find_meta($exception->role_name),
         Bar2->meta,
         'Role Bar2 does Role Bar3');
 }
@@ -125,7 +126,7 @@ use Moose();
         has 'foo' => (
             is  => 'ro',
             isa => 'Int'
-	);
+        );
     }
 
     {
@@ -135,7 +136,7 @@ use Moose();
         has 'foo' => (
             is  => 'ro',
             isa => 'Int'
-	);
+        );
     }
 
     my $exception = exception {
@@ -145,37 +146,37 @@ use Moose();
     like(
         $exception,
         qr/\QRole 'Foo4' has encountered an attribute conflict while being composed into 'Bar4'. This is a fatal error and cannot be disambiguated. The conflicting attribute is named 'foo'./,
-	'Role Foo4 & Role Bar4 has one common attribute named "foo"');
+        'Role Foo4 & Role Bar4 has one common attribute named "foo"');
 
     isa_ok(
         $exception,
         "Moose::Exception::AttributeConflictInRoles",
-	'Role Foo4 & Role Bar4 has one common attribute named "foo"');
+        'Role Foo4 & Role Bar4 has one common attribute named "foo"');
 
     is(
         $exception->role_name,
         "Foo4",
-	'Role Foo4 & Role Bar4 has one common attribute named "foo"');
+        'Role Foo4 & Role Bar4 has one common attribute named "foo"');
 
     is(
-        $exception->role,
+        find_meta($exception->role_name),
         Foo4->meta,
-	'Role Foo4 & Role Bar4 has one common attribute named "foo"');
+        'Role Foo4 & Role Bar4 has one common attribute named "foo"');
 
     is(
-        $exception->second_role->name,
+        $exception->second_role_name,
         "Bar4",
-	'Role Foo4 & Role Bar4 has one common attribute named "foo"');
+        'Role Foo4 & Role Bar4 has one common attribute named "foo"');
 
     is(
-        $exception->second_role,
+        find_meta($exception->second_role_name),
         Bar4->meta,
-	'Role Foo4 & Role Bar4 has one common attribute named "foo"');
+        'Role Foo4 & Role Bar4 has one common attribute named "foo"');
 
     is(
         $exception->attribute_name,
         'foo',
-	'Role Foo4 & Role Bar4 has one common attribute named "foo"');
+        'Role Foo4 & Role Bar4 has one common attribute named "foo"');
 }
 
 {
@@ -214,17 +215,17 @@ use Moose();
         "Role Bar5 already has a method named foo_in_bar");
 
     is(
-        $exception->role,
+        find_meta($exception->role_name),
         Bar5->meta,
         "Role Bar5 already has a method named foo_in_bar");
 
     is(
-        $exception->role_being_applied->name,
+        $exception->role_being_applied_name,
         "Foo5",
         "Role Bar5 already has a method named foo_in_bar");
 
     is(
-        $exception->role_being_applied,
+        find_meta($exception->role_being_applied_name),
         Foo5->meta,
         "Role Bar5 already has a method named foo_in_bar");
 
@@ -273,17 +274,17 @@ use Moose();
         "Role Foo6 is overriding a method named foo6, which is a local method in Bar6");
 
     is(
-        $exception->role,
+        find_meta($exception->role_name),
         Bar6->meta,
         "Role Foo6 is overriding a method named foo6, which is a local method in Bar6");
 
     is(
-        $exception->role_being_applied->name,
+        $exception->role_being_applied_name,
         "Foo6",
         "Role Foo6 is overriding a method named foo6, which is a local method in Bar6");
 
     is(
-        $exception->role_being_applied,
+        find_meta($exception->role_being_applied_name),
         Foo6->meta,
         "Role Foo6 is overriding a method named foo6, which is a local method in Bar6");
 
@@ -312,7 +313,7 @@ use Moose();
 
     like(
         $exception,
-        qr/\QRole 'Foo7' has encountered an 'override' method conflict during composition (Two 'override' methods of the same name encountered). This is fatal error./,
+        qr/\QRole 'Foo7' has encountered an 'override' method conflict during composition (Two 'override' methods of the same name encountered). This is a fatal error./,
         "Roles Foo7 & Bar7, both have override foo7");
 
     isa_ok(
@@ -326,17 +327,17 @@ use Moose();
         "Roles Foo7 & Bar7, both have override foo7");
 
     is(
-        $exception->role,
+        find_meta($exception->role_name),
         Bar7->meta,
         "Roles Foo7 & Bar7, both have override foo7");
 
     is(
-        $exception->role_being_applied->name,
+        $exception->role_being_applied_name,
         "Foo7",
         "Roles Foo7 & Bar7, both have override foo7");
 
     is(
-        $exception->role_being_applied,
+        find_meta($exception->role_being_applied_name),
         Foo7->meta,
         "Roles Foo7 & Bar7, both have override foo7");
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -9,7 +8,7 @@ use Moose::Meta::Role::Application;
 
 {
     my $exception =  exception {
-	Moose::Meta::Role::Application->check_role_exclusions;
+        Moose::Meta::Role::Application->check_role_exclusions;
     };
 
     like(
@@ -25,7 +24,7 @@ use Moose::Meta::Role::Application;
 
 {
     my $exception =  exception {
-	Moose::Meta::Role::Application->check_required_methods;
+        Moose::Meta::Role::Application->check_required_methods;
     };
 
     like(
@@ -41,7 +40,7 @@ use Moose::Meta::Role::Application;
 
 {
     my $exception =  exception {
-	Moose::Meta::Role::Application->check_required_attributes;
+        Moose::Meta::Role::Application->check_required_attributes;
     };
 
     like(
@@ -57,7 +56,7 @@ use Moose::Meta::Role::Application;
 
 {
     my $exception =  exception {
-	Moose::Meta::Role::Application->apply_attributes;
+        Moose::Meta::Role::Application->apply_attributes;
     };
 
     like(
@@ -73,7 +72,7 @@ use Moose::Meta::Role::Application;
 
 {
     my $exception =  exception {
-	Moose::Meta::Role::Application->apply_methods;
+        Moose::Meta::Role::Application->apply_methods;
     };
 
     like(
@@ -89,7 +88,7 @@ use Moose::Meta::Role::Application;
 
 {
     my $exception =  exception {
-	Moose::Meta::Role::Application->apply_override_method_modifiers;
+        Moose::Meta::Role::Application->apply_override_method_modifiers;
     };
 
     like(
@@ -105,7 +104,7 @@ use Moose::Meta::Role::Application;
 
 {
     my $exception =  exception {
-	Moose::Meta::Role::Application->apply_method_modifiers;
+        Moose::Meta::Role::Application->apply_method_modifiers;
     };
 
     like(
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -15,12 +14,12 @@ use Moose();
     like(
         $exception,
         qr/You must provide a name for the attribute/,
-	"no name is given");
+        "no name is given");
 
     isa_ok(
         $exception,
         "Moose::Exception::MustProvideANameForTheAttribute",
-	"no name is given");
+        "no name is given");
 }
 
 {
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -15,17 +14,17 @@ use Moose();
     like(
         $exception,
         qr/\QThe list of roles must be instances of Moose::Meta::Role, not foo/,
-	"'foo' is not an instance of Moose::Meta::Role");
+        "'foo' is not an instance of Moose::Meta::Role");
 
     isa_ok(
         $exception,
         "Moose::Exception::RolesListMustBeInstancesOfMooseMetaRole",
-	"'foo' is not an instance of Moose::Meta::Role");
+        "'foo' is not an instance of Moose::Meta::Role");
 
     is(
         $exception->role,
         "foo",
-	"'foo' is not an instance of Moose::Meta::Role");
+        "'foo' is not an instance of Moose::Meta::Role");
 }
 
 {
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -10,7 +9,7 @@ use Moose::Util::TypeConstraints;
 
 {
     my $exception = exception {
-        Moose::Meta::TypeCoercion::Union->new( type_constraint => "Str" );
+        Moose::Meta::TypeCoercion::Union->new( type_constraint => find_type_constraint("Str") );
     };
 
     like(
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -48,18 +47,18 @@ use Moose();
     like(
         $exception,
         qr/\QEnum values must be strings, not '$arrayRef'/,
-	"an array ref is given instead of a string");
+        "an array ref is given instead of a string");
         #Enum values must be strings, not 'ARRAY(0x191d1b8)'
 
     isa_ok(
         $exception,
         "Moose::Exception::EnumValuesMustBeString",
-	"an array ref is given instead of a string");
+        "an array ref is given instead of a string");
 
     is(
-	$exception->value,
-	$arrayRef,
-	"an array ref is given instead of a string");
+        $exception->value,
+        $arrayRef,
+        "an array ref is given instead of a string");
 }
 
 done_testing;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -27,13 +26,13 @@ use Moose::Util::TypeConstraints;
         "no inline constraint was defined for xyz");
 
     is(
-        $exception->type,
-        $intType,
+        $exception->type_name,
+        "Int",
         "no inline constraint was defined for xyz");
 
     is(
-        $exception->parameterizable_type_object,
-        $type,
+        $exception->parameterizable_type_object_name,
+        $type->name,
         "no inline constraint was defined for xyz");
 }
 
@@ -55,7 +54,7 @@ use Moose::Util::TypeConstraints;
         "Int is not a subtype of Float");
 
     is(
-        $exception->type,
+        $exception->type_name,
         $parameterizable,
         "Int is not a subtype of Float");
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -57,7 +56,7 @@ use Test::Fatal;
         has 'foo' => (
             is  => 'ro',
             isa => 'Int[Xyz]',
-	);
+        );
     };
 
     like(
@@ -74,6 +73,11 @@ use Test::Fatal;
         $exception->type_name,
         "Int[Xyz]",
         "invalid isa given to foo");
+
+    is(
+        $exception->parent_type_name,
+        'Int',
+        "invalid isa given to foo");
 }
 
 done_testing;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -23,7 +22,7 @@ use Moose();
         "You cannot coerce a type unless coercion is supported by that type");
 
     is(
-        $exception->type->name,
+        $exception->type_name,
         'HexNum',
         "You cannot coerce a type unless coercion is supported by that type");
 
@@ -41,12 +40,12 @@ use Moose();
     like(
         $exception,
         qr/The 'message' parameter must be a coderef/,
-	"'foo' is not a CODE ref");
+        "'foo' is not a CODE ref");
 
     isa_ok(
         $exception,
         "Moose::Exception::MessageParameterMustBeCodeRef",
-	"'foo' is not a CODE ref");
+        "'foo' is not a CODE ref");
 }
 
 {
@@ -75,7 +74,7 @@ use Moose();
         "cannot inline NotInlinable");
 
     is(
-        $exception->type,
+        find_type_constraint( $exception->type_name ),
         $not_inlinable,
         "cannot inline NotInlinable");
 }
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -7,6 +6,8 @@ use Test::Fatal;
 
 use Moose();
 
+use Moose::Util 'find_meta';
+
 {
     my $exception = exception {
         package Bar;
@@ -43,7 +44,7 @@ use Moose();
         "requires expects atleast one method name");
 
     is(
-        $exception->role->name,
+        $exception->role_name,
         'Bar',
         'requires expects atleast one method name');
 }
@@ -66,7 +67,7 @@ use Moose();
         "excludes expects atleast one role name");
 
     is(
-        $exception->role->name,
+        $exception->role_name,
         'Bar',
         'excludes expects atleast one role name');
 }
@@ -134,7 +135,7 @@ use Moose();
         "has takes a hash");
 
     is(
-        $exception->role->name,
+        $exception->role_name,
         'Foo1',
         "has takes a hash");
 }
@@ -180,8 +181,8 @@ use Moose();
 
 {
     {
-	package Foo3;
-	use Moose;
+        package Foo3;
+        use Moose;
     }
 
     my $exception = exception {
@@ -207,8 +208,8 @@ use Moose();
 
 {
     {
-	package Foo3;
-	use Moose;
+        package Foo3;
+        use Moose;
     }
 
     my $exception = exception {
@@ -235,7 +236,7 @@ use Moose();
         "Foo3 is a Moose class");
 
     is(
-        $exception->class,
+        find_meta($exception->class_name),
         Foo3->meta,
         "Foo3 is a Moose class");
 
@@ -273,7 +274,7 @@ use Moose();
         "Foo4 is a Class::MOP::Class, not a Moose::Meta::Role");
 
     is(
-        $exception->class,
+        find_meta( $exception->class_name ),
         $foo,
         "Foo4 is a Class::MOP::Class, not a Moose::Meta::Role");
 
@@ -285,10 +286,10 @@ use Moose();
 
 {
     my $exception = exception {
-	package Foo;
-	use Moose::Role;
+        package Foo;
+        use Moose::Role;
 
-	before qr/foo/;
+        before qr/foo/;
     };
 
     like(
@@ -307,7 +308,7 @@ use Moose();
         "a regex reference is given to before");
 
     is(
-        $exception->role,
+        find_meta($exception->role_name),
         Foo->meta,
         "a regex reference is given to before");
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -84,7 +83,7 @@ my $x = "123";
         "an ArrayRef is given as action");
 
     is(
-        $exception->type,
+        $exception->type_name,
         "Int",
         "an ArrayRef is given as action");
 
@@ -1,10 +1,11 @@
-
 use strict;
 use warnings;
 
 use Test::More;
 use Test::Fatal;
 
+use Moose::Util 'find_meta';
+
 # tests for extends without arguments
 {
     my $exception = exception {
@@ -58,15 +59,15 @@ use Test::Fatal;
         "Foo2 is not loaded");
 
     is(
-	$exception->class_name,
-	"Foo2",
-	"Foo2 is not loaded");
+        $exception->class_name,
+        "Foo2",
+        "Foo2 is not loaded");
 }
 
 {
     {
-	package Foo3;
-	use Moose::Role;
+        package Foo3;
+        use Moose::Role;
     }
 
     my $exception = exception {
@@ -92,8 +93,8 @@ use Test::Fatal;
 
 {
     {
-	package Foo3;
-	use Moose::Role;
+        package Foo3;
+        use Moose::Role;
     }
 
     my $exception = exception {
@@ -120,7 +121,7 @@ use Test::Fatal;
         "Foo3 is a Moose::Role");
 
     is(
-        $exception->role,
+        find_meta($exception->role_name),
         Foo3->meta,
         "Foo3 is a Moose::Role");
 
@@ -133,8 +134,8 @@ use Test::Fatal;
 {
     my $foo;
     {
-	use Moose;
-	$foo = Class::MOP::Class->create("Foo4");
+        use Moose;
+        $foo = Class::MOP::Class->create("Foo4");
     }
 
     my $exception = exception {
@@ -159,7 +160,7 @@ use Test::Fatal;
         "Foo4 is a Class::MOP::Class, not a Moose::Meta::Class");
 
     is(
-        $exception->class,
+        find_meta($exception->class_name),
         $foo,
         "Foo4 is a Class::MOP::Class, not a Moose::Meta::Class");
 
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -51,7 +50,7 @@ use Test::Fatal;
         "Cannot call does() without a role name");
 
     is(
-        $exception->class->name,
+        $exception->class_name,
         "Foo",
         "Cannot call does() without a role name");
 
@@ -70,7 +69,7 @@ use Test::Fatal;
         "Cannot call does() without a role name");
 
     is(
-        $exception->class->name,
+        $exception->class_name,
         "Foo",
         "Cannot call does() without a role name");
 }
@@ -0,0 +1,45 @@
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Fatal;
+
+# https://rt.cpan.org/Ticket/Display.html?id=92818
+
+{
+    package Parent;
+    use Moose;
+    has x => (
+        is => 'rw',
+        required => 1,
+    );
+}
+
+{
+    my $e = exception { my $obj = Parent->new };
+    ok(
+        $e->isa('Moose::Exception::AttributeIsRequired'),
+        'got the right exception',
+    )
+    or note 'got exception ', ref($e), ': ', $e->message;
+}
+
+{
+    package Child;
+    use Moose;
+    extends 'Parent';
+}
+
+# the exception produced should be AttributeIsRequired, however
+# AttributeIsRequired was throwing the exception ClassNamesDoNotMatch.
+
+{
+    my $e = exception { my $obj = Child->new };
+    ok(
+        $e->isa('Moose::Exception::AttributeIsRequired'),
+        'got the right exception',
+    )
+    or note 'got exception ', ref($e), ': ', $e->message;
+}
+
+done_testing;
@@ -0,0 +1,34 @@
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Fatal;
+
+# https://rt.cpan.org/Ticket/Display.html?id=94795
+
+# the exception produced should be AttributeIsRequired, however
+# AttributeIsRequired was throwing the exception ClassNamesDoNotMatch.
+
+{
+    package AAA;
+    use Moose;
+    has my_attr => (
+        is => 'ro',
+        required => 1,
+    );
+}
+
+{
+    package BBB;
+    use Moose;
+    extends qw/AAA/;
+}
+
+my $e = exception { BBB->new };
+ok(
+    $e->isa('Moose::Exception::AttributeIsRequired'),
+    'got the right exception',
+)
+or note 'got exception ', ref($e), ': ', $e->message;
+
+done_testing;
@@ -0,0 +1,111 @@
+use strict;
+use warnings;
+
+use Test::More;
+use Try::Tiny;
+
+{
+    my $e;
+    {
+        package Foo;
+        use Moose;
+        use Try::Tiny;
+
+        try {
+            has '+foo' => ( is => 'ro' );
+        }
+        catch {
+            $e = $_;
+        };
+    }
+
+    ok( $e, q{got an exception from a bad has '+foo' declaration} );
+    like(
+        $e->as_string,
+        qr/\QCould not find an attribute by the name of 'foo' to inherit from in Foo/,
+        'stringification includes the error message'
+    );
+    like(
+        $e->as_string,
+        qr/\s+Moose::has/,
+        'stringification includes the call to Moose::has'
+    );
+    unlike(
+        $e->as_string,
+        qr/Moose::Meta/,
+        'stringification does not include internal calls to Moose meta classes'
+    );
+
+    try {
+        Foo->meta->clone_object( [] );
+    }
+    catch {
+        $e = $_;
+    };
+
+    like(
+        $e->as_string,
+        qr/Class::MOP::Class::clone_object/,
+        'exception include first Class::MOP::Class frame'
+    );
+    unlike(
+        $e->as_string,
+        qr/Class::MOP::Mixin::_throw_exception/,
+        'exception does not include internal calls toClass::MOP::Class meta classes'
+    );
+}
+
+local $ENV{MOOSE_FULL_EXCEPTION} = 1;
+{
+    my $e;
+    {
+        package Bar;
+        use Moose;
+        use Try::Tiny;
+
+        try {
+            has '+foo' => ( is => 'ro' );
+        }
+        catch {
+            $e = $_;
+        };
+    }
+
+    ok( $e, q{got an exception from a bad has '+foo' declaration} );
+    like(
+        $e->as_string,
+        qr/\QCould not find an attribute by the name of 'foo' to inherit from in Bar/,
+        'stringification includes the error message'
+    );
+    like(
+        $e->as_string,
+        qr/\s+Moose::has/,
+        'stringification includes the call to Moose::has'
+    );
+    like(
+        $e->as_string,
+        qr/Moose::Meta/,
+        'stringification includes internal calls to Moose meta classes when MOOSE_FULL_EXCEPTION env var is true'
+    );
+
+
+    try {
+        Foo->meta->clone_object( [] );
+    }
+    catch {
+        $e = $_;
+    };
+
+    like(
+        $e->as_string,
+        qr/Class::MOP::Class::clone_object/,
+        'exception include first Class::MOP::Class frame'
+    );
+    like(
+        $e->as_string,
+        qr/Class::MOP::Mixin::_throw_exception/,
+        'exception includes internal calls toClass::MOP::Class meta classes when MOOSE_FULL_EXCEPTION env var is true'
+    );
+}
+
+done_testing;
@@ -0,0 +1,34 @@
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Fatal;
+
+# this test taken from MooseX::ABC t/immutable.t, where it broke with Moose 2.1207
+
+{
+    package ABC;
+    use Moose::Role;
+    around new => sub {
+        my $orig = shift;
+        my $class = shift;
+        my $meta = Class::MOP::class_of($class);
+        $meta->throw_error("$class is abstract, it cannot be instantiated");
+        $class->$orig(@_);
+    };
+}
+{
+    package MyApp::Base;
+    use Moose;
+    with 'ABC';
+    __PACKAGE__->meta->make_immutable(inline_constructor => 0);
+}
+
+
+like(
+    exception { MyApp::Base->new },
+    qr/MyApp::Base is abstract, it cannot be instantiated/,
+    'instantiating abstract classes fails',
+);
+
+done_testing;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -26,81 +25,81 @@ use Moose::Util::TypeConstraints;
 
 {
     my $exception = exception {
-	Moose::Util::TypeConstraints::create_type_constraint_union();
+        Moose::Util::TypeConstraints::create_type_constraint_union();
     };
 
     like(
         $exception,
         qr/You must pass in at least 2 type names to make a union/,
-	"Moose::Util::TypeConstraints::create_type_constraint_union takes atleast two arguments");
+        "Moose::Util::TypeConstraints::create_type_constraint_union takes atleast two arguments");
 
     isa_ok(
         $exception,
         "Moose::Exception::UnionTakesAtleastTwoTypeNames",
-	"Moose::Util::TypeConstraints::create_type_constraint_union takes atleast two arguments");
+        "Moose::Util::TypeConstraints::create_type_constraint_union takes atleast two arguments");
 }
 
 {
     my $exception = exception {
-	Moose::Util::TypeConstraints::create_type_constraint_union('foo','bar');
+        Moose::Util::TypeConstraints::create_type_constraint_union('foo','bar');
     };
 
     like(
         $exception,
         qr/\QCould not locate type constraint (foo) for the union/,
-	"invalid typeconstraint given to Moose::Util::TypeConstraints::create_type_constraint_union");
+        "invalid typeconstraint given to Moose::Util::TypeConstraints::create_type_constraint_union");
 
     isa_ok(
         $exception,
         "Moose::Exception::CouldNotLocateTypeConstraintForUnion",
-	"invalid typeconstraint given to Moose::Util::TypeConstraints::create_type_constraint_union");
+        "invalid typeconstraint given to Moose::Util::TypeConstraints::create_type_constraint_union");
 
     is(
-	$exception->type_name,
-	'foo',
-	"invalid typeconstraint given to Moose::Util::TypeConstraints::create_type_constraint_union");
+        $exception->type_name,
+        'foo',
+        "invalid typeconstraint given to Moose::Util::TypeConstraints::create_type_constraint_union");
 }
 
 {
     my $exception = exception {
-	Moose::Util::TypeConstraints::create_parameterized_type_constraint("Foo");
+        Moose::Util::TypeConstraints::create_parameterized_type_constraint("Foo");
     };
 
     like(
         $exception,
         qr/\QCould not parse type name (Foo) correctly/,
-	"'Foo' is not a valid type constraint name");
+        "'Foo' is not a valid type constraint name");
 
     isa_ok(
         $exception,
         "Moose::Exception::InvalidTypeGivenToCreateParameterizedTypeConstraint",
-	"'Foo' is not a valid type constraint name");
+        "'Foo' is not a valid type constraint name");
 }
 
 {
     my $exception = exception {
-	Moose::Util::TypeConstraints::create_parameterized_type_constraint("Foo[Int]");
+        Moose::Util::TypeConstraints::create_parameterized_type_constraint("Foo[Int]");
     };
 
     like(
         $exception,
         qr/\QCould not locate the base type (Foo)/,
-	"'Foo' is not a valid base type constraint name");
+        "'Foo' is not a valid base type constraint name");
 
     isa_ok(
         $exception,
         "Moose::Exception::InvalidBaseTypeGivenToCreateParameterizedTypeConstraint",
-	"'Foo' is not a valid base type constraint name");
+        "'Foo' is not a valid base type constraint name");
 }
 
 {
     {
-	package Foo1;
-	use Moose::Role;
+        package Foo1;
+        use Moose::Role;
     }
 
     my $exception = exception {
-	Moose::Util::TypeConstraints::class_type("Foo1");
+        Moose::Util::TypeConstraints::class_type("Foo1");
     };
 
     like(
@@ -114,29 +113,29 @@ use Moose::Util::TypeConstraints;
         "there is an already defined role of name 'Foo1'");
 
     is(
-	$exception->type->name,
-	'Foo1',
+        $exception->type_name,
+        'Foo1',
         "there is an already defined role of name 'Foo1'");
 
     is(
-	$exception->type->_package_defined_in,
-	'Moose::Role',
+        (find_type_constraint($exception->type_name))->_package_defined_in,
+        'Moose::Role',
         "there is an already defined role of name 'Foo1'");
 
     is(
-	$exception->package_defined_in,
-	'main',
+        $exception->package_defined_in,
+        'main',
         "there is an already defined role of name 'Foo1'");
 }
 
 {
     {
-	package Foo2;
-	use Moose;
+        package Foo2;
+        use Moose;
     }
 
     my $exception = exception {
-	Moose::Util::TypeConstraints::role_type("Foo2");
+        Moose::Util::TypeConstraints::role_type("Foo2");
     };
 
     like(
@@ -150,24 +149,24 @@ use Moose::Util::TypeConstraints;
         "there is an already defined class of name 'Foo2'");
 
     is(
-	$exception->type->name,
-	'Foo2',
+        $exception->type_name,
+        'Foo2',
         "there is an already defined class of name 'Foo2'");
 
     is(
-	$exception->type->_package_defined_in,
-	'Moose',
+        (find_type_constraint($exception->type_name))->_package_defined_in,
+        'Moose',
         "there is an already defined class of name 'Foo2'");
 
     is(
-	$exception->package_defined_in,
-	'main',
+        $exception->package_defined_in,
+        'main',
         "there is an already defined class of name 'Foo2'");
 }
 
 {
     my $exception = exception {
-	subtype 'Foo';
+        subtype 'Foo';
     };
 
     like(
@@ -181,14 +180,14 @@ use Moose::Util::TypeConstraints;
         "no parent given to subtype");
 
     is(
-	$exception->name,
-	'Foo',
+        $exception->name,
+        'Foo',
         "no parent given to subtype");
 }
 
 {
     my $exception = exception {
-	enum [1,2,3], "foo";
+        enum [1,2,3], "foo";
     };
 
     like(
@@ -204,7 +203,7 @@ use Moose::Util::TypeConstraints;
 
 {
     my $exception = exception {
-	union [1,2,3], "foo";
+        union [1,2,3], "foo";
     };
 
     like(
@@ -220,12 +219,12 @@ use Moose::Util::TypeConstraints;
 
 {
     {
-	package Foo3;
-	use Moose;
+        package Foo3;
+        use Moose;
     }
 
     my $exception = exception {
-	Moose::Util::TypeConstraints::type("Foo3");
+        Moose::Util::TypeConstraints::type("Foo3");
     };
 
     like(
@@ -239,24 +238,24 @@ use Moose::Util::TypeConstraints;
         "there is an already defined class of name 'Foo3'");
 
     is(
-	$exception->type->name,
-	'Foo3',
+        $exception->type_name,
+        'Foo3',
         "there is an already defined class of name 'Foo3'");
 
     is(
-	$exception->type->_package_defined_in,
-	'Moose',
+        find_type_constraint($exception->type_name)->_package_defined_in,
+        'Moose',
         "there is an already defined class of name 'Foo3'");
 
     is(
-	$exception->package_defined_in,
-	'main',
+        $exception->package_defined_in,
+        'main',
         "there is an already defined class of name 'Foo3'");
 }
 
 {
     my $exception = exception {
-	Moose::Util::TypeConstraints::coerce "Foo";
+        Moose::Util::TypeConstraints::coerce "Foo";
     };
 
     like(
@@ -272,7 +271,7 @@ use Moose::Util::TypeConstraints;
 
 {
     my $exception = exception {
-	Moose::Util::TypeConstraints::add_parameterizable_type "Foo";
+        Moose::Util::TypeConstraints::add_parameterizable_type "Foo";
     };
 
     like(
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -116,12 +115,12 @@ use Moose::Util qw/apply_all_roles add_method_modifier/;
 
 {
     {
-	package Foo;
-	use Moose;
+        package Foo;
+        use Moose;
     }
 
     my $exception = exception {
-	add_method_modifier(Foo->meta, "before", [{}, sub {"before";}]);
+        add_method_modifier(Foo->meta, "before", [{}, sub {"before";}]);
     };
 
     like(
@@ -135,32 +134,34 @@ use Moose::Util qw/apply_all_roles add_method_modifier/;
         "we gave a HashRef to before");
 
     is(
-	ref( $exception->params->[0] ),
-	"HASH",
+        ref( $exception->params->[0] ),
+        "HASH",
         "we gave a HashRef to before");
 
     is(
-	$exception->modifier_name,
-	'before',
+        $exception->modifier_name,
+        'before',
         "we gave a HashRef to before");
 
     is(
-	$exception->class_or_object->name,
-	"Foo",
+        $exception->class_or_object->name,
+        "Foo",
         "we gave a HashRef to before");
 }
 
 {
-    use Moose::Util;
-    use Moose::Util::TypeConstraints;
-
     my $exception = exception {
-        Moose::Util::resolve_metaclass_alias(find_type_constraint('Int'), 'Xyz');
+        package My::Class;
+        use Moose;
+        has 'attr' => (
+            is     => 'ro',
+            traits => [qw( Xyz )],
+        );
     };
 
     like(
         $exception,
-        qr/^Can't locate Moose::Meta::Int::Custom::Xyz or Xyz in \@INC \(\@INC contains:/,
+        qr/^Can't locate Moose::Meta::Attribute::Custom::Trait::Xyz or Xyz in \@INC \(\@INC contains:/,
         "Cannot locate 'Xyz'");
 
     isa_ok(
@@ -169,18 +170,18 @@ use Moose::Util qw/apply_all_roles add_method_modifier/;
         "Cannot locate 'Xyz'");
 
     is(
-	$exception->type_name,
-	"Int",
+        $exception->type,
+        "Attribute",
         "Cannot locate 'Xyz'");
 
     is(
-	$exception->possible_packages,
-	'Moose::Meta::Int::Custom::Xyz or Xyz',
+        $exception->possible_packages,
+        'Moose::Meta::Attribute::Custom::Trait::Xyz or Xyz',
         "Cannot locate 'Xyz'");
 
     is(
-	$exception->metaclass_name,
-	"Xyz",
+        $exception->metaclass_name,
+        "Xyz",
         "Cannot locate 'Xyz'");
 }
 
@@ -2,10 +2,7 @@ use strict;
 use warnings;
 
 use Test::More;
-
-use Test::Requires {
-    'Test::Output' => '0.01', # skip all if not installed
-};
+use Test::Requires 'Test::Output';  # skip all if not installed
 
 {
     package NotMoose;
@@ -2,10 +2,7 @@ use strict;
 use warnings;
 
 use Test::More;
-
-use Test::Requires {
-    'Test::Output' => '0.01', # skip all if not installed
-};
+use Test::Requires 'Test::Output';  # skip all if not installed
 
 {
     package ModdedNew;
@@ -2,10 +2,7 @@ use strict;
 use warnings;
 
 use Test::More;
-
-use Test::Requires {
-    'Test::Output' => '0.01', # skip all if not installed
-};
+use Test::Requires 'Test::Output';  # skip all if not installed
 
 {
     package Foo;
@@ -1,11 +1,12 @@
 use strict;
 use warnings;
+
 use Test::More;
+use Test::Requires qw(Data::Visitor PadWalker);
 
 use Class::Load 'load_class';
-use Test::Requires 'Data::Visitor';
-use Test::Requires 'PadWalker';
 use Try::Tiny;
+
 my $can_partialdump = try {
     load_class('Devel::PartialDump', { -version => 0.14 }); 1;
 };
@@ -1,4 +1,3 @@
-
 package Bar;
 use Moose;
 use Moose::Util::TypeConstraints;
@@ -1,7 +1,6 @@
-
 package Foo;
 use Moose;
 
 has 'bar' => (is => 'rw');
 
-1;
\ No newline at end of file
+1;
@@ -1,5 +1,3 @@
-
-
 package MyExporter;
 use Moose::Exporter;
 use Test::More;
@@ -0,0 +1,7 @@
+package Overloading::ClassConsumesRoleConsumesOverloads;
+
+use Moose;
+
+with 'Overloading::RoleConsumesOverloads';
+
+1;
@@ -0,0 +1,7 @@
+package Overloading::ClassWithCombiningRole;
+
+use Moose;
+
+with 'Overloading::CombiningRole';
+
+1;
@@ -0,0 +1,7 @@
+package Overloading::ClassWithOneRole;
+
+use Moose;
+
+with 'Overloading::RoleWithOverloads';
+
+1;
@@ -0,0 +1,7 @@
+package Overloading::CombiningClass;
+
+use Moose;
+
+with 'Overloading::RoleWithOverloads', 'Overloading::RoleWithoutOverloads';
+
+1;
@@ -0,0 +1,7 @@
+package Overloading::CombiningRole;
+
+use Moose::Role;
+
+with 'Overloading::RoleWithOverloads', 'Overloading::RoleWithoutOverloads';
+
+1;
@@ -0,0 +1,7 @@
+package Overloading::RoleConsumesOverloads;
+
+use Moose::Role;
+
+with 'Overloading::RoleWithOverloads';
+
+1;
@@ -0,0 +1,16 @@
+package Overloading::RoleWithOverloads;
+
+use Moose::Role;
+
+use overload
+    q{""}    => 'as_string',
+    fallback => 1;
+
+has message => (
+    is  => 'rw',
+    isa => 'Str',
+);
+
+sub as_string { shift->message }
+
+1;
@@ -0,0 +1,5 @@
+package Overloading::RoleWithoutOverloads;
+
+use Moose::Role;
+
+1;
@@ -0,0 +1,47 @@
+package OverloadingTests;
+
+use strict;
+use warnings;
+
+use Test::More 0.88;
+
+sub test_overloading_for_package {
+    my $package = shift;
+
+    ok(
+        overload::Overloaded($package),
+        "$package is overloaded"
+    );
+    ok(
+        overload::Method( $package, q{""} ),
+        "$package overloads stringification"
+    );
+}
+
+sub test_no_overloading_for_package {
+    my $package = shift;
+
+    ok(
+        !overload::Overloaded($package),
+        "$package is not overloaded"
+    );
+    ok(
+        !overload::Method( $package, q{""} ),
+        "$package does not overload stringification"
+    );
+}
+
+sub test_overloading_for_object {
+    my $class = shift;
+    my $thing = shift || "$class object";
+
+    my $object = ref $class ? $class : $class->new( { message => 'foo' } );
+
+    is(
+        "$object",
+        'foo',
+        "$thing stringifies to value of message attribute"
+    );
+}
+
+1;
@@ -1,9 +1,9 @@
-# this functionality may be pushing toward parametric roles/classes
-# it's off in a corner and may not be that important
-
 use strict;
 use warnings;
 
+# this functionality may be pushing toward parametric roles/classes
+# it's off in a corner and may not be that important
+
 use Test::More;
 use Test::Fatal;
 
@@ -61,4 +61,3 @@ ok(Class::Vacuum::Innards->can('parasol'), 'Vacuum stole the parasol method');
 ok(!Victim2->can('parasol'), 'Victim does not get it at all');
 
 done_testing;
-
@@ -0,0 +1,44 @@
+use strict;
+use warnings;
+
+use Test::CleanNamespaces;
+use Test::More;
+
+{
+    package Metarole;
+    use Moose::Role;
+}
+
+$::HAS_NC_AC = 0;
+
+{
+    package Foo;
+    use Moose ();
+    use Moose::Exporter;
+    {
+        local $@;
+        eval 'use namespace::autoclean; $::HAS_NC_AC = 1';
+    }
+
+    Moose::Exporter->setup_import_methods(
+        also            => 'Moose',
+        class_metaroles => { class => ['Metarole'] },
+    );
+
+    my $meta = Class::MOP::Package->initialize(__PACKAGE__);
+    for my $name (qw( import unimport init_meta )) {
+        my $body = $meta->get_package_symbol( '&' . $name );
+        my ( $package, $sub_name ) = Class::MOP::get_code_info($body);
+
+        ::is( $package, __PACKAGE__, "$name sub is in Foo package" );
+        ::is( $sub_name, $name, "$name sub has that name, not __ANON__" );
+    }
+}
+
+if ($::HAS_NC_AC) {
+    $INC{'Foo.pm'} = 1;
+    namespaces_clean('Foo');
+}
+
+done_testing();
+
@@ -15,7 +15,7 @@ use Test::More;
     no Moose;
 }
 can_ok('Foo', 'meta');
-is(Foo->meta, Class::MOP::class_of('Foo'));
+is(Foo->meta, Class::MOP::class_of('Foo'), 'Foo is a class_of Foo, via Foo->meta');
 isa_ok(Foo->meta->get_method('meta'), 'Moose::Meta::Method::Meta');
 
 {
@@ -24,9 +24,9 @@ isa_ok(Foo->meta->get_method('meta'), 'Moose::Meta::Method::Meta');
     extends 'Base';
     no Moose;
 }
-ok(!Bar->can('meta'));
+ok(!Bar->can('meta'), 'Bar->cant(\'meta\')');
 can_ok('Bar', 'bar_meta');
-is(Bar->bar_meta, Class::MOP::class_of('Bar'));
+is(Bar->bar_meta, Class::MOP::class_of('Bar'), 'Bar is a class_of Bar, via Bar->bar_meta');
 isa_ok(Bar->bar_meta->get_method('bar_meta'), 'Moose::Meta::Method::Meta');
 
 {
@@ -35,11 +35,27 @@ isa_ok(Bar->bar_meta->get_method('bar_meta'), 'Moose::Meta::Method::Meta');
     extends 'Base';
     no Moose;
 }
-ok(!Baz->can('meta'));
+ok(!Baz->can('meta'), 'Baz->cant(\'meta\')');
 
 my $universal_method_count = scalar Class::MOP::class_of('UNIVERSAL')->get_all_methods;
 # 1 because of the dummy method we installed in Base
-is( ( scalar Class::MOP::class_of('Baz')->get_all_methods )
-    - $universal_method_count, 1 );
+is(
+    ( scalar Class::MOP::class_of('Baz')->get_all_methods ) - $universal_method_count,
+    1,
+    'Baz has one method',
+);
+
+TODO: {
+{
+    package Qux;
+    use Moose -meta_name => 'qux_meta';
+}
+
+local $TODO = 'should be able to change the meta_name here too';
+ok(!Qux->can('meta'), 'Qux->cant(\'meta\')');
+can_ok('Qux', 'qux_meta');
+is(Qux->qux_meta, Class::MOP::class_of('Qux'), 'Qux is a class_of Qux, via Qux->qux_meta');
+isa_ok(Qux->qux_meta->get_method('qux_meta'), 'Moose::Meta::Method::Meta');
+}
 
 done_testing;
@@ -4,10 +4,7 @@ use warnings;
 use Test::More;
 use Test::Fatal;
 use Test::Moose;
-
-use Test::Requires {
-    'Test::Output' => '0.01', # skip all if not installed
-};
+use Test::Requires 'Test::Output';  # skip all if not installed
 
 {
     package HasOwnImmutable;
@@ -347,7 +344,7 @@ use Test::Requires {
         also        => ['Moose'],
         with_meta   => [ 'with_meta1', 'with_meta2' ],
         with_caller => [ 'with_caller1', 'with_caller2' ],
-        as_is       => ['as_is1'],
+        as_is       => ['as_is1', \&Foreign::Class::as_is2, 'Foreign::Class::as_is3'],
     );
 
     sub with_caller1 {
@@ -360,6 +357,9 @@ use Test::Requires {
 
     sub as_is1 {2}
 
+    sub Foreign::Class::as_is2 { return 'as_is2' }
+    sub Foreign::Class::as_is3 { return 'as_is3' }
+
     sub with_meta1 {
         return @_;
     }
@@ -377,7 +377,7 @@ use Test::Requires {
 
 {
     can_ok( 'UseAllOptions', $_ )
-        for qw( with_meta1 with_meta2 with_caller1 with_caller2 as_is1 );
+        for qw( with_meta1 with_meta2 with_caller1 with_caller2 as_is1 as_is2 as_is3 );
 
     {
         my ( $caller, $arg1 ) = UseAllOptions::with_caller1(42);
@@ -411,7 +411,7 @@ use Test::Requires {
 
 {
     ok( ! UseAllOptions->can($_), "UseAllOptions::$_ has been unimported" )
-        for qw( with_meta1 with_meta2 with_caller1 with_caller2 as_is1 );
+        for qw( with_meta1 with_meta2 with_caller1 with_caller2 as_is1 as_is2 as_is3 );
 }
 
 {
@@ -1,8 +1,11 @@
 use strict;
 use warnings;
+
 use Test::More;
 use Test::Fatal;
 
+use Sub::Name qw( subname );
+
 my $quote = qr/['`"]/;
 
 {
@@ -13,25 +16,48 @@ my $quote = qr/['`"]/;
 {
     my $meta = Foo->meta;
 
-    ok(!$meta->is_overloaded);
-
-    is_deeply([sort $meta->overload_operators],
-              [sort map { split /\s+/ } values %overload::ops]);
-
-    ok(!$meta->has_overloaded_operator('+'));
-    ok(!$meta->has_overloaded_operator('-'));
-
-    is_deeply([$meta->get_overload_list], []);
-
-    is_deeply([$meta->get_all_overloaded_operators], []);
-
-    is($meta->get_overloaded_operator('+'), undef);
-    is($meta->get_overloaded_operator('-'), undef);
+    subtest(
+        'Foo class (not overloaded)',
+        sub {
+            ok( !$meta->is_overloaded, 'is not overloaded' );
+
+            ok(
+                !$meta->has_overloaded_operator('+'),
+                'has no + overloading'
+            );
+            ok(
+                !$meta->has_overloaded_operator('-'),
+                'has no - overloading'
+            );
+
+            is_deeply(
+                [ $meta->get_overload_list ], [],
+                '->get_overload_list returns an empty list'
+            );
+
+            is_deeply(
+                [ $meta->get_all_overloaded_operators ], [],
+                '->get_all_overloaded_operators return an empty list'
+            );
+
+            is(
+                $meta->get_overloaded_operator('+'), undef,
+                'get_overloaded_operator(+) returns undef'
+            );
+            is(
+                $meta->get_overloaded_operator('-'), undef,
+                'get_overloaded_operator(-) returns undef'
+            );
+        }
+    );
 }
 
 my $plus = 0;
 my $plus_impl;
-BEGIN { $plus_impl = sub { $plus = 1; "plus" } }
+
+BEGIN {
+    $plus_impl = sub { $plus = 1; 42 }
+}
 {
     package Foo::Overloaded;
     use Moose;
@@ -41,137 +67,414 @@ BEGIN { $plus_impl = sub { $plus = 1; "plus" } }
 {
     my $meta = Foo::Overloaded->meta;
 
-    ok($meta->is_overloaded);
-
-    ok($meta->has_overloaded_operator('+'));
-    ok(!$meta->has_overloaded_operator('-'));
-
-    is_deeply([$meta->get_overload_list], ['+']);
-
-    my @overloads = $meta->get_all_overloaded_operators;
-    is(scalar(@overloads), 1);
-    my $plus_meth = $overloads[0];
-    isa_ok($plus_meth, 'Class::MOP::Method::Overload');
-    is($plus_meth->operator, '+');
-    is($plus_meth->name, '(+');
-    is($plus_meth->body, $plus_impl);
-    is($plus_meth->package_name, 'Foo::Overloaded');
-    is($plus_meth->associated_metaclass, $meta);
-
-    my $plus_meth2 = $meta->get_overloaded_operator('+');
-    { local $TODO = "we don't cache these yet";
-    is($plus_meth2, $plus_meth);
-    }
-    is($plus_meth2->operator, '+');
-    is($plus_meth2->body, $plus_impl);
-    is($meta->get_overloaded_operator('-'), undef);
-
-    is($plus, 0);
-    is(Foo::Overloaded->new + Foo::Overloaded->new, "plus");
-    is($plus, 1);
-
-    my $minus = 0;
-    my $minus_impl = sub { $minus = 1; "minus" };
-
-    like(exception { Foo::Overloaded->new - Foo::Overloaded->new },
-         qr/Operation $quote-$quote: no method found/);
-
-    $meta->add_overloaded_operator('-' => $minus_impl);
-
-    ok($meta->has_overloaded_operator('-'));
-
-    is_deeply([sort $meta->get_overload_list], ['+', '-']);
-
-    is(scalar($meta->get_all_overloaded_operators), 2);
-
-    my $minus_meth = $meta->get_overloaded_operator('-');
-    isa_ok($minus_meth, 'Class::MOP::Method::Overload');
-    is($minus_meth->operator, '-');
-    is($minus_meth->name, '(-');
-    is($minus_meth->body, $minus_impl);
-    is($minus_meth->package_name, 'Foo::Overloaded');
-    is($minus_meth->associated_metaclass, $meta);
-
-    is($minus, 0);
-    is(Foo::Overloaded->new - Foo::Overloaded->new, "minus");
-    is($minus, 1);
-
-    $meta->remove_overloaded_operator('-');
-
-    like(exception { Foo::Overloaded->new - Foo::Overloaded->new },
-         qr/Operation $quote-$quote: no method found/);
+    subtest(
+        'Foo::Overload class (overloaded with coderef)',
+        sub {
+            ok( $meta->is_overloaded, 'is overloaded' );
+
+            ok(
+                $meta->has_overloaded_operator('+'),
+                'has + overloading'
+            );
+            ok(
+                !$meta->has_overloaded_operator('-'),
+                'has no - overloading'
+            );
+
+            is_deeply(
+                [ $meta->get_overload_list ], ['+'],
+                '->get_overload_list returns (+) '
+            );
+
+            my @overloads = $meta->get_all_overloaded_operators;
+            is(
+                scalar(@overloads), 1,
+                '->get_all_overloaded_operators returns 1 operator'
+            );
+            my $plus_overload = $overloads[0];
+            isa_ok(
+                $plus_overload, 'Class::MOP::Overload',
+                'overload object'
+            );
+            is( $plus_overload->operator, '+', 'operator for overload is +' );
+            is(
+                $plus_overload->coderef, $plus_impl,
+                'coderef for overload matches sub we passed'
+            );
+            is(
+                $plus_overload->coderef_package, 'main',
+                'coderef package for overload is main'
+            );
+            is(
+                $plus_overload->coderef_name, '__ANON__',
+                'coderef name for overload is __ANON__'
+            );
+            ok(
+                $plus_overload->is_anonymous,
+                'overload is anonymous'
+            );
+            ok(
+                !$plus_overload->has_method_name,
+                'overload has no method name'
+            );
+            ok(
+                !$plus_overload->has_method,
+                'overload has no method'
+            );
+            is(
+                $plus_overload->associated_metaclass, $meta,
+                'overload is associated with expected metaclass'
+            );
+
+            my $plus_overload2 = $meta->get_overloaded_operator('+');
+            is(
+                $plus_overload2, $plus_overload,
+                '->get_overloaded_operator(+) returns the same operator on each call'
+            );
+
+            is( $plus, 0, '+ overloading has not been called' );
+            is(
+                Foo::Overloaded->new + Foo::Overloaded->new, 42,
+                '+ overloading returns 42'
+            );
+            is( $plus, 1, '+ overloading was called once' );
+
+            ok(
+                $plus_overload->_is_equal_to($plus_overload2),
+                '_is_equal_to returns true for the exact same object'
+            );
+
+            my $plus_overload3 = Class::MOP::Overload->new(
+                operator        => '+',
+                coderef         => $plus_impl,
+                coderef_package => 'main',
+                coderef_name    => '__ANON__',
+            );
+
+            ok(
+                $plus_overload->_is_equal_to($plus_overload3),
+                '_is_equal_to returns true for object with the same properties'
+            );
+
+            my $minus = 0;
+            my $minus_impl
+                = subname( 'overload_minus', sub { $minus = 1; -42 } );
+
+            like(
+                exception { Foo::Overloaded->new - Foo::Overloaded->new },
+                qr/Operation $quote-$quote: no .+ found/,
+                'trying to call - on objects fails'
+            );
+
+            $meta->add_overloaded_operator( '-' => $minus_impl );
+
+            ok(
+                $meta->has_overloaded_operator('-'),
+                'has - operator after call to ->add_overloaded_operator'
+            );
+
+            is_deeply(
+                [ sort $meta->get_overload_list ], [ '+', '-' ],
+                '->get_overload_list returns (+, -)'
+            );
+
+            is(
+                scalar( $meta->get_all_overloaded_operators ), 2,
+                '->get_all_overloaded_operators returns 2 operators'
+            );
+
+            my $minus_overload = $meta->get_overloaded_operator('-');
+            isa_ok(
+                $minus_overload, 'Class::MOP::Overload',
+                'object for - overloading'
+            );
+            is(
+                $minus_overload->operator, '-',
+                'operator for overload is -'
+            );
+            is(
+                $minus_overload->coderef, $minus_impl,
+                'coderef for overload matches sub we passed'
+            );
+            is(
+                $minus_overload->coderef_package, 'main',
+                'coderef package for overload is main'
+            );
+            is(
+                $minus_overload->coderef_name, 'overload_minus',
+                'coderef name for overload is overload_minus'
+            );
+            ok(
+                !$minus_overload->is_anonymous,
+                'overload is not anonymous'
+            );
+            is(
+                $minus_overload->associated_metaclass, $meta,
+                'overload is associated with expected metaclass'
+            );
+
+            is( $minus, 0, '- overloading has not been called' );
+            is(
+                Foo::Overloaded->new - Foo::Overloaded->new, -42,
+                '- overloading returns -42'
+            );
+            is( $minus, 1, '+- overloading was called once' );
+
+            ok(
+                !$plus_overload->_is_equal_to($minus_overload),
+                '_is_equal_to returns false for objects with different properties'
+            );
+
+            $meta->remove_overloaded_operator('-');
+
+            like(
+                exception { Foo::Overloaded->new - Foo::Overloaded->new },
+                qr/Operation $quote-$quote: no .+ found/,
+                'trying to call - on objects fails after call to ->remove_overloaded_operator'
+            );
+        }
+    );
 }
 
-my $times = 0;
+my $times   = 0;
 my $divided = 0;
 {
-    package Foo::OverloadedMethod;
+    package Foo::OverloadWithMethod;
     use Moose;
     use overload '*' => 'times';
 
-    sub times   { $times = 1;   "times" }
-    sub divided { $divided = 1; "divided" }
+    sub times   { $times   = 1; 'times' }
+    sub divided { $divided = 1; 'divided' }
 }
 
 {
-    my $meta = Foo::OverloadedMethod->meta;
-
-    ok($meta->is_overloaded);
-
-    ok($meta->has_overloaded_operator('*'));
-    ok(!$meta->has_overloaded_operator('/'));
-
-    is_deeply([$meta->get_overload_list], ['*']);
-
-    my @overloads = $meta->get_all_overloaded_operators;
-    is(scalar(@overloads), 1);
-    my $times_meth = $overloads[0];
-    isa_ok($times_meth, 'Class::MOP::Method::Overload');
-    is($times_meth->operator, '*');
-    is($times_meth->name, '(*');
-    is($times_meth->body, $meta->get_method('times')->body);
-    is($times_meth->package_name, 'Foo::OverloadedMethod');
-    is($times_meth->associated_metaclass, $meta);
-
-    my $times_meth2 = $meta->get_overloaded_operator('*');
-    { local $TODO = "we don't cache these yet";
-    is($times_meth2, $times_meth);
-    }
-    is($times_meth2->operator, '*');
-    is($times_meth2->body, $meta->get_method('times')->body);
-    is($meta->get_overloaded_operator('/'), undef);
-
-    is($times, 0);
-    is(Foo::OverloadedMethod->new * Foo::OverloadedMethod->new, "times");
-    is($times, 1);
-
-    like(exception { Foo::OverloadedMethod->new / Foo::OverloadedMethod->new },
-         qr{Operation $quote/$quote: no method found});
-
-    $meta->add_overloaded_operator('/' => 'divided');
-
-    ok($meta->has_overloaded_operator('/'));
-
-    is_deeply([sort $meta->get_overload_list], ['*', '/']);
-
-    is(scalar($meta->get_all_overloaded_operators), 2);
-
-    my $divided_meth = $meta->get_overloaded_operator('/');
-    isa_ok($divided_meth, 'Class::MOP::Method::Overload');
-    is($divided_meth->operator, '/');
-    is($divided_meth->name, '(/');
-    is($divided_meth->body, $meta->get_method('divided')->body);
-    is($divided_meth->package_name, 'Foo::OverloadedMethod');
-    is($divided_meth->associated_metaclass, $meta);
-
-    is($divided, 0);
-    is(Foo::OverloadedMethod->new / Foo::OverloadedMethod->new, "divided");
-    is($divided, 1);
+    my $meta = Foo::OverloadWithMethod->meta;
+
+    subtest(
+        'Foo::OverloadWithMethod (overloaded via method)',
+        sub {
+            ok(
+                $meta->is_overloaded,
+                'is overloaded'
+            );
+
+            ok(
+                $meta->has_overloaded_operator('*'),
+                'overloads *'
+            );
+            ok(
+                !$meta->has_overloaded_operator('/'),
+                'does not overload /'
+            );
+
+            is_deeply(
+                [ $meta->get_overload_list ], ['*'],
+                '->get_overload_list returns (*)'
+            );
+
+            my @overloads = $meta->get_all_overloaded_operators;
+            is(
+                scalar(@overloads), 1,
+                '->get_all_overloaded_operators returns 1 item'
+            );
+            my $times_overload = $overloads[0];
+            isa_ok(
+                $times_overload, 'Class::MOP::Overload',
+                'overload object'
+            );
+            is(
+                $times_overload->operator, '*',
+                'operator for overload is +'
+            );
+            ok(
+                $times_overload->has_method_name,
+                'overload has a method name'
+            );
+            is(
+                $times_overload->method_name, 'times',
+                q{method name is 'times'}
+            );
+            ok(
+                !$times_overload->has_coderef,
+                'overload does not have a coderef'
+            );
+            ok(
+                !$times_overload->has_coderef_package,
+                'overload does not have a coderef package'
+            );
+            ok(
+                !$times_overload->has_coderef_name,
+                'overload does not have a coderef name'
+            );
+            ok(
+                !$times_overload->is_anonymous,
+                'overload is not anonymous'
+            );
+            ok(
+                $times_overload->has_method,
+                'overload has a method'
+            );
+            is(
+                $times_overload->method, $meta->get_method('times'),
+                '->method returns method object for times method'
+            );
+            is(
+                $times_overload->associated_metaclass, $meta,
+                'overload is associated with expected metaclass'
+            );
+
+            is( $times, 0, '* overloading has not been called' );
+            is(
+                Foo::OverloadWithMethod->new * Foo::OverloadWithMethod->new,
+                'times',
+                q{* overloading returns 'times'}
+            );
+            is( $times, 1, '* overloading was called once' );
+
+            my $times_overload2 = $meta->get_overloaded_operator('*');
+
+            ok(
+                $times_overload->_is_equal_to($times_overload2),
+                '_is_equal_to returns true for the exact same object'
+            );
+
+            my $times_overload3 = Class::MOP::Overload->new(
+                operator    => '*',
+                method_name => 'times',
+            );
+
+            ok(
+                $times_overload->_is_equal_to($times_overload3),
+                '_is_equal_to returns true for object with the same properties'
+            );
+
+            like(
+                exception {
+                    Foo::OverloadWithMethod->new
+                        / Foo::OverloadWithMethod->new
+                },
+                qr{Operation $quote/$quote: no .+ found},
+                'trying to call / on objects fails'
+            );
+
+            $meta->add_overloaded_operator( '/' => 'divided' );
+
+            ok(
+                $meta->has_overloaded_operator('/'),
+                'has / operator after call to ->add_overloaded_operator'
+            );
+
+            is_deeply(
+                [ sort $meta->get_overload_list ], [ '*', '/' ],
+                '->get_overload_list returns (*, /)'
+            );
+
+            is(
+                scalar( $meta->get_all_overloaded_operators ), 2,
+                '->get_all_overloaded_operators returns 2 operators'
+            );
+
+            my $divided_overload = $meta->get_overloaded_operator('/');
+            isa_ok(
+                $divided_overload, 'Class::MOP::Overload',
+                'overload object'
+            );
+            is(
+                $divided_overload->operator, '/',
+                'operator for overload is /'
+            );
+            is(
+                $divided_overload->method_name, 'divided',
+                q{method name is 'divided'}
+            );
+            is(
+                $divided_overload->method, $meta->get_method('divided'),
+                '->method returns method object for divided method'
+            );
+            is(
+                $divided_overload->associated_metaclass, $meta,
+                'overload is associated with expected metaclass'
+            );
+
+            $meta->remove_overloaded_operator('/');
+
+            like(
+                exception {
+                    Foo::OverloadWithMethod->new
+                        / Foo::OverloadWithMethod->new
+                },
+                qr{Operation $quote/$quote: no .+ found},
+                'trying to call / on objects fails after call to ->remove_overloaded_operator'
+            );
+        }
+    );
+}
 
-    $meta->remove_overloaded_operator('/');
+{
+    package Foo::UnimplementedOverload;
+    use Moose;
+    use overload '+' => 'plus';
+}
 
-    like(exception { Foo::OverloadedMethod->new / Foo::OverloadedMethod->new },
-         qr{Operation $quote/$quote: no method found});
+{
+    my $meta = Foo::UnimplementedOverload->meta;
+
+    subtest(
+        'Foo::UnimplementedOverload (overloaded via method that does not exist)',
+        sub {
+            ok(
+                $meta->is_overloaded,
+                'is overloaded'
+            );
+
+            ok(
+                $meta->has_overloaded_operator('+'),
+                'overloads +'
+            );
+
+            my $plus_overload = $meta->get_overloaded_operator('+');
+            isa_ok(
+                $plus_overload, 'Class::MOP::Overload',
+                'overload object'
+            );
+            is(
+                $plus_overload->operator, '+',
+                'operator for overload is +'
+            );
+            ok(
+                $plus_overload->has_method_name,
+                'overload has a method name'
+            );
+            is(
+                $plus_overload->method_name, 'plus',
+                q{method name is 'plus'}
+            );
+            ok(
+                !$plus_overload->has_coderef,
+                'overload does not have a coderef'
+            );
+            ok(
+                !$plus_overload->has_coderef_package,
+                'overload does not have a coderef package'
+            );
+            ok(
+                !$plus_overload->has_coderef_name,
+                'overload does not have a coderef name'
+            );
+            ok(
+                !$plus_overload->is_anonymous,
+                'overload is not anonymous'
+            );
+            ok(
+                !$plus_overload->has_method,
+                'overload has no method object'
+            );
+            is(
+                $plus_overload->associated_metaclass, $meta,
+                'overload is associated with expected metaclass'
+            );
+        }
+    );
 }
 
 done_testing;
@@ -159,7 +159,7 @@ like( exception {
         method_metaclass    => 'Bar::Meta::Method',
         attribute_metaclass => 'Bar::Meta::Attribute',
     );
-}, qr/compatible/ );
+}, qr/\QAttribute (class_name) is required/ );
 
 {
     package Baz::Meta::Class;
@@ -222,7 +222,7 @@ like( exception {
         method_metaclass    => 'Baz::Meta::Method',
         attribute_metaclass => 'Baz::Meta::Attribute',
     );
-}, qr/compatible/ );
+}, qr/\QAttribute (class_name) is required/ );
 
 {
     package Quux;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -7,4 +7,37 @@ BEGIN {
     use_ok('Moose::Util');
 }
 
+{
+    package Moosey::Class;
+    use Moose;
+}
+{
+    package Moosey::Role;
+    use Moose::Role;
+}
+{
+    package Other;
+}
+{
+    package Moosey::Composed;
+    use Moose;
+    with 'Moosey::Role';
+}
+
+use Moose::Util 'is_role';
+
+{
+    my $class = Moosey::Class->new;
+    my $composed = Moosey::Composed->new;
+
+    ok(!is_role('Moosey::Class'), 'a moose class is not a role');
+    ok(is_role('Moosey::Role'), 'a moose role is a role');
+    ok(!is_role('Other'), 'something else is not a role');
+    ok(!is_role('DoesNotExist'), 'non-existent namespace is not a role');
+    ok(!is_role('Moosey::Composed'), 'a moose class that composes a role is not a role');
+
+    ok(!is_role($class), 'instantiated moose object is not a role');
+    ok(!is_role($composed), 'instantiated moose object that does a role is not a role');
+}
+
 done_testing;
@@ -1,4 +1,3 @@
-
 use strict;
 use warnings;
 
@@ -0,0 +1,219 @@
+use strict;
+use warnings;
+
+use Test::More;
+
+
+{
+    package Human;
+
+    use Moose;
+    use Moose::Util::TypeConstraints;
+
+    subtype 'Sex'
+        => as 'Str'
+        => where { $_ =~ m{^[mf]$}s };
+
+    has 'sex'    => ( is => 'ro', isa => 'Sex', required => 1 );
+
+    has 'mother' => ( is => 'ro', isa => 'Human' );
+    has 'father' => ( is => 'ro', isa => 'Human' );
+
+    use overload '+' => \&_overload_add, fallback => 1;
+
+    sub _overload_add {
+        my ( $one, $two ) = @_;
+
+        die('Only male and female humans may create children')
+            if ( $one->sex() eq $two->sex() );
+
+        my ( $mother, $father )
+            = ( $one->sex eq 'f' ? ( $one, $two ) : ( $two, $one ) );
+
+        my $sex = 'f';
+        $sex = 'm' if ( rand() >= 0.5 );
+
+        return Human->new(
+            sex       => $sex,
+            eye_color => ( $one->eye_color() + $two->eye_color() ),
+            mother    => $mother,
+            father    => $father,
+        );
+    }
+
+    use List::MoreUtils qw( zip );
+
+    coerce 'Human::EyeColor'
+        => from 'ArrayRef'
+        => via { my @genes = qw( bey2_1 bey2_2 gey_1 gey_2 );
+                 return Human::EyeColor->new( zip( @genes, @{$_} ) ); };
+
+    has 'eye_color' => (
+        is       => 'ro',
+        isa      => 'Human::EyeColor',
+        coerce   => 1,
+        required => 1,
+    );
+
+}
+
+{
+    package Human::Gene::bey2;
+
+    use Moose;
+    use Moose::Util::TypeConstraints;
+
+    type 'bey2_color' => where { $_ =~ m{^(?:brown|blue)$} };
+
+    has 'color' => ( is => 'ro', isa => 'bey2_color' );
+}
+
+{
+    package Human::Gene::gey;
+
+    use Moose;
+    use Moose::Util::TypeConstraints;
+
+    type 'gey_color' => where { $_ =~ m{^(?:green|blue)$} };
+
+    has 'color' => ( is => 'ro', isa => 'gey_color' );
+}
+
+{
+    package Human::EyeColor;
+
+    use Moose;
+    use Moose::Util::TypeConstraints;
+
+    coerce 'Human::Gene::bey2'
+        => from 'Str'
+            => via { Human::Gene::bey2->new( color => $_ ) };
+
+    coerce 'Human::Gene::gey'
+        => from 'Str'
+            => via { Human::Gene::gey->new( color => $_ ) };
+
+    has [qw( bey2_1 bey2_2 )] =>
+        ( is => 'ro', isa => 'Human::Gene::bey2', coerce => 1 );
+
+    has [qw( gey_1 gey_2 )] =>
+        ( is => 'ro', isa => 'Human::Gene::gey', coerce => 1 );
+
+    sub color {
+        my ($self) = @_;
+
+        return 'brown'
+            if ( $self->bey2_1->color() eq 'brown'
+            or $self->bey2_2->color() eq 'brown' );
+
+        return 'green'
+            if ( $self->gey_1->color() eq 'green'
+            or $self->gey_2->color() eq 'green' );
+
+        return 'blue';
+    }
+
+    use overload '""' => \&color, fallback => 1;
+
+    use overload '+' => \&_overload_add, fallback => 1;
+
+    sub _overload_add {
+        my ( $one, $two ) = @_;
+
+        my $one_bey2 = 'bey2_' . _rand2();
+        my $two_bey2 = 'bey2_' . _rand2();
+
+        my $one_gey = 'gey_' . _rand2();
+        my $two_gey = 'gey_' . _rand2();
+
+        return Human::EyeColor->new(
+            bey2_1 => $one->$one_bey2->color(),
+            bey2_2 => $two->$two_bey2->color(),
+            gey_1  => $one->$one_gey->color(),
+            gey_2  => $two->$two_gey->color(),
+        );
+    }
+
+    sub _rand2 {
+        return 1 + int( rand(2) );
+    }
+}
+
+my $gene_color_sets = [
+    [ qw( blue blue blue blue )     => 'blue' ],
+    [ qw( blue blue green blue )    => 'green' ],
+    [ qw( blue blue blue green )    => 'green' ],
+    [ qw( blue blue green green )   => 'green' ],
+    [ qw( brown blue blue blue )    => 'brown' ],
+    [ qw( brown brown green green ) => 'brown' ],
+    [ qw( blue brown green blue )   => 'brown' ],
+];
+
+foreach my $set (@$gene_color_sets) {
+    my $expected_color = pop(@$set);
+
+    my $person = Human->new(
+        sex       => 'f',
+        eye_color => $set,
+    );
+
+    is(
+        $person->eye_color(),
+        $expected_color,
+        'gene combination '
+            . join( ',', @$set )
+            . ' produces '
+            . $expected_color
+            . ' eye color',
+    );
+}
+
+my $parent_sets = [
+    [
+        [qw( blue blue blue blue )],
+        [qw( blue blue blue blue )] => 'blue'
+    ],
+    [
+        [qw( blue blue blue blue )],
+        [qw( brown brown green blue )] => 'brown'
+    ],
+    [
+        [qw( blue blue green green )],
+        [qw( blue blue green green )] => 'green'
+    ],
+];
+
+foreach my $set (@$parent_sets) {
+    my $expected_color = pop(@$set);
+
+    my $mother         = Human->new(
+        sex       => 'f',
+        eye_color => shift(@$set),
+    );
+
+    my $father = Human->new(
+        sex       => 'm',
+        eye_color => shift(@$set),
+    );
+
+    my $child = $mother + $father;
+
+    is(
+        $child->eye_color(),
+        $expected_color,
+        'mother '
+            . $mother->eye_color()
+            . ' + father '
+            . $father->eye_color()
+            . ' = child '
+            . $expected_color,
+    );
+}
+
+# Hmm, not sure how to test for random selection of genes since
+# I could theoretically run an infinite number of iterations and
+# never find proof that a child has inherited a particular gene.
+
+# AUTHOR: Aran Clary Deltac <bluefeet@cpan.org>
+
+done_testing;
@@ -1,219 +0,0 @@
-use strict;
-use warnings;
-
-use Test::More;
-
-
-{
-    package Human;
-
-    use Moose;
-    use Moose::Util::TypeConstraints;
-
-    subtype 'Sex'
-        => as 'Str'
-        => where { $_ =~ m{^[mf]$}s };
-
-    has 'sex'    => ( is => 'ro', isa => 'Sex', required => 1 );
-
-    has 'mother' => ( is => 'ro', isa => 'Human' );
-    has 'father' => ( is => 'ro', isa => 'Human' );
-
-    use overload '+' => \&_overload_add, fallback => 1;
-
-    sub _overload_add {
-        my ( $one, $two ) = @_;
-
-        die('Only male and female humans may create children')
-            if ( $one->sex() eq $two->sex() );
-
-        my ( $mother, $father )
-            = ( $one->sex eq 'f' ? ( $one, $two ) : ( $two, $one ) );
-
-        my $sex = 'f';
-        $sex = 'm' if ( rand() >= 0.5 );
-
-        return Human->new(
-            sex       => $sex,
-            eye_color => ( $one->eye_color() + $two->eye_color() ),
-            mother    => $mother,
-            father    => $father,
-        );
-    }
-
-    use List::MoreUtils qw( zip );
-
-    coerce 'Human::EyeColor'
-        => from 'ArrayRef'
-        => via { my @genes = qw( bey2_1 bey2_2 gey_1 gey_2 );
-                 return Human::EyeColor->new( zip( @genes, @{$_} ) ); };
-
-    has 'eye_color' => (
-        is       => 'ro',
-        isa      => 'Human::EyeColor',
-        coerce   => 1,
-        required => 1,
-    );
-
-}
-
-{
-    package Human::Gene::bey2;
-
-    use Moose;
-    use Moose::Util::TypeConstraints;
-
-    type 'bey2_color' => where { $_ =~ m{^(?:brown|blue)$} };
-
-    has 'color' => ( is => 'ro', isa => 'bey2_color' );
-}
-
-{
-    package Human::Gene::gey;
-
-    use Moose;
-    use Moose::Util::TypeConstraints;
-
-    type 'gey_color' => where { $_ =~ m{^(?:green|blue)$} };
-
-    has 'color' => ( is => 'ro', isa => 'gey_color' );
-}
-
-{
-    package Human::EyeColor;
-
-    use Moose;
-    use Moose::Util::TypeConstraints;
-
-    coerce 'Human::Gene::bey2'
-        => from 'Str'
-            => via { Human::Gene::bey2->new( color => $_ ) };
-
-    coerce 'Human::Gene::gey'
-        => from 'Str'
-            => via { Human::Gene::gey->new( color => $_ ) };
-
-    has [qw( bey2_1 bey2_2 )] =>
-        ( is => 'ro', isa => 'Human::Gene::bey2', coerce => 1 );
-
-    has [qw( gey_1 gey_2 )] =>
-        ( is => 'ro', isa => 'Human::Gene::gey', coerce => 1 );
-
-    sub color {
-        my ($self) = @_;
-
-        return 'brown'
-            if ( $self->bey2_1->color() eq 'brown'
-            or $self->bey2_2->color() eq 'brown' );
-
-        return 'green'
-            if ( $self->gey_1->color() eq 'green'
-            or $self->gey_2->color() eq 'green' );
-
-        return 'blue';
-    }
-
-    use overload '""' => \&color, fallback => 1;
-
-    use overload '+' => \&_overload_add, fallback => 1;
-
-    sub _overload_add {
-        my ( $one, $two ) = @_;
-
-        my $one_bey2 = 'bey2_' . _rand2();
-        my $two_bey2 = 'bey2_' . _rand2();
-
-        my $one_gey = 'gey_' . _rand2();
-        my $two_gey = 'gey_' . _rand2();
-
-        return Human::EyeColor->new(
-            bey2_1 => $one->$one_bey2->color(),
-            bey2_2 => $two->$two_bey2->color(),
-            gey_1  => $one->$one_gey->color(),
-            gey_2  => $two->$two_gey->color(),
-        );
-    }
-
-    sub _rand2 {
-        return 1 + int( rand(2) );
-    }
-}
-
-my $gene_color_sets = [
-    [ qw( blue blue blue blue )     => 'blue' ],
-    [ qw( blue blue green blue )    => 'green' ],
-    [ qw( blue blue blue green )    => 'green' ],
-    [ qw( blue blue green green )   => 'green' ],
-    [ qw( brown blue blue blue )    => 'brown' ],
-    [ qw( brown brown green green ) => 'brown' ],
-    [ qw( blue brown green blue )   => 'brown' ],
-];
-
-foreach my $set (@$gene_color_sets) {
-    my $expected_color = pop(@$set);
-
-    my $person = Human->new(
-        sex       => 'f',
-        eye_color => $set,
-    );
-
-    is(
-        $person->eye_color(),
-        $expected_color,
-        'gene combination '
-            . join( ',', @$set )
-            . ' produces '
-            . $expected_color
-            . ' eye color',
-    );
-}
-
-my $parent_sets = [
-    [
-        [qw( blue blue blue blue )],
-        [qw( blue blue blue blue )] => 'blue'
-    ],
-    [
-        [qw( blue blue blue blue )],
-        [qw( brown brown green blue )] => 'brown'
-    ],
-    [
-        [qw( blue blue green green )],
-        [qw( blue blue green green )] => 'green'
-    ],
-];
-
-foreach my $set (@$parent_sets) {
-    my $expected_color = pop(@$set);
-
-    my $mother         = Human->new(
-        sex       => 'f',
-        eye_color => shift(@$set),
-    );
-
-    my $father = Human->new(
-        sex       => 'm',
-        eye_color => shift(@$set),
-    );
-
-    my $child = $mother + $father;
-
-    is(
-        $child->eye_color(),
-        $expected_color,
-        'mother '
-            . $mother->eye_color()
-            . ' + father '
-            . $father->eye_color()
-            . ' = child '
-            . $expected_color,
-    );
-}
-
-# Hmm, not sure how to test for random selection of genes since
-# I could theoretically run an infinite number of iterations and
-# never find proof that a child has inherited a particular gene.
-
-# AUTHOR: Aran Clary Deltac <bluefeet@cpan.org>
-
-done_testing;
@@ -8,9 +8,7 @@ $| = 1;
 
 
 # =begin testing SETUP
-use Test::Requires {
-    'Test::Output' => '0',
-};
+use Test::Requires 'Test::Output';
 
 
 
@@ -34,9 +34,7 @@ $| = 1;
 
 
 # =begin testing SETUP
-use Test::Requires {
-    'Test::Output' => '0',
-};
+use Test::Requires 'Test::Output';
 
 
 
@@ -0,0 +1,86 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Test::More 'no_plan';
+use Test::Fatal;
+$| = 1;
+
+
+
+# =begin testing SETUP
+{
+
+  package MyApp::Meta::Attribute::Labeled;
+  use Moose;
+  extends 'Moose::Meta::Attribute';
+
+  has label => (
+      is        => 'rw',
+      isa       => 'Str',
+      predicate => 'has_label',
+  );
+
+  package Moose::Meta::Attribute::Custom::Labeled;
+  sub register_implementation {'MyApp::Meta::Attribute::Labeled'}
+
+  package MyApp::Website;
+  use Moose;
+
+  has url => (
+      metaclass => 'Labeled',
+      is        => 'rw',
+      isa       => 'Str',
+      label     => "The site's URL",
+  );
+
+  has name => (
+      is  => 'rw',
+      isa => 'Str',
+  );
+
+  sub dump {
+      my $self = shift;
+
+      my $meta = $self->meta;
+
+      my $dump = '';
+
+      for my $attribute ( map { $meta->get_attribute($_) }
+          sort $meta->get_attribute_list ) {
+
+          if (   $attribute->isa('MyApp::Meta::Attribute::Labeled')
+              && $attribute->has_label ) {
+              $dump .= $attribute->label;
+          }
+          else {
+              $dump .= $attribute->name;
+          }
+
+          my $reader = $attribute->get_read_method;
+          $dump .= ": " . $self->$reader . "\n";
+      }
+
+      return $dump;
+  }
+
+  package main;
+
+  my $app = MyApp::Website->new( url => "http://google.com", name => "Google" );
+}
+
+
+
+# =begin testing
+{
+my $app = MyApp::Website->new( url => "http://google.com", name => "Google" );
+is(
+    $app->dump, q{name: Google
+The site's URL: http://google.com
+}, '... got the expected dump value'
+);
+}
+
+
+
+
+1;
@@ -1,86 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-use Test::More 'no_plan';
-use Test::Fatal;
-$| = 1;
-
-
-
-# =begin testing SETUP
-{
-
-  package MyApp::Meta::Attribute::Labeled;
-  use Moose;
-  extends 'Moose::Meta::Attribute';
-
-  has label => (
-      is        => 'rw',
-      isa       => 'Str',
-      predicate => 'has_label',
-  );
-
-  package Moose::Meta::Attribute::Custom::Labeled;
-  sub register_implementation {'MyApp::Meta::Attribute::Labeled'}
-
-  package MyApp::Website;
-  use Moose;
-
-  has url => (
-      metaclass => 'Labeled',
-      is        => 'rw',
-      isa       => 'Str',
-      label     => "The site's URL",
-  );
-
-  has name => (
-      is  => 'rw',
-      isa => 'Str',
-  );
-
-  sub dump {
-      my $self = shift;
-
-      my $meta = $self->meta;
-
-      my $dump = '';
-
-      for my $attribute ( map { $meta->get_attribute($_) }
-          sort $meta->get_attribute_list ) {
-
-          if (   $attribute->isa('MyApp::Meta::Attribute::Labeled')
-              && $attribute->has_label ) {
-              $dump .= $attribute->label;
-          }
-          else {
-              $dump .= $attribute->name;
-          }
-
-          my $reader = $attribute->get_read_method;
-          $dump .= ": " . $self->$reader . "\n";
-      }
-
-      return $dump;
-  }
-
-  package main;
-
-  my $app = MyApp::Website->new( url => "http://google.com", name => "Google" );
-}
-
-
-
-# =begin testing
-{
-my $app = MyApp::Website->new( url => "http://google.com", name => "Google" );
-is(
-    $app->dump, q{name: Google
-The site's URL: http://google.com
-}, '... got the expected dump value'
-);
-}
-
-
-
-
-1;
@@ -1,10 +1,8 @@
 use strict;
 use warnings;
-use Test::More;
 
-use Test::Requires {
-    'Test::Output' => '0.01', # skip all if not installed
-};
+use Test::More;
+use Test::Requires 'Test::Output';  # skip all if not installed
 
 # this test script ensures that my idiom of:
 # role: sub BUILD, after BUILD
@@ -1,30 +0,0 @@
-use strict;
-use warnings;
-use Test::More;
-
-{
-    package Foo;
-    use Moose::Role;
-
-    use overload
-        q{""}    => sub { 42 },
-        fallback => 1;
-
-    no Moose::Role;
-}
-
-{
-    package Bar;
-    use Moose;
-    with 'Foo';
-    no Moose;
-}
-
-my $bar = Bar->new;
-
-TODO: {
-    local $TODO = "the special () method isn't properly composed into the class";
-    is("$bar", 42, 'overloading can be composed');
-}
-
-done_testing;
@@ -0,0 +1,33 @@
+use strict;
+use warnings;
+
+use Test::More 0.96;
+use Test::Warnings;
+use overload ();
+
+use lib 't/lib';
+
+use OverloadingTests;
+use Overloading::CombiningClass;
+
+for my $role (
+    qw( Overloading::RoleWithOverloads Overloading::RoleWithoutOverloads )) {
+
+    ok(
+        Overloading::CombiningClass->DOES($role),
+        "Overloading::CombiningClass does $role role"
+    );
+}
+
+OverloadingTests::test_overloading_for_package($_) for qw(
+    Overloading::RoleWithOverloads
+    Overloading::CombiningClass
+);
+
+OverloadingTests::test_no_overloading_for_package(
+    'Overloading::RoleWithoutOverloads');
+
+OverloadingTests::test_overloading_for_package(
+    'Overloading::CombiningClass');
+
+done_testing();
@@ -0,0 +1,39 @@
+use strict;
+use warnings;
+
+use Test::More 0.88;
+use Test::Warnings;
+use overload ();
+
+use lib 't/lib';
+
+use OverloadingTests;
+use Overloading::RoleWithOverloads;
+use Overloading::RoleWithoutOverloads;
+
+{
+    package MyClass;
+    use Moose;
+}
+
+my $object = MyClass->new;
+
+Moose::Meta::Role->combine(
+    [ 'Overloading::RoleWithOverloads'    => undef ],
+    [ 'Overloading::RoleWithoutOverloads' => undef ],
+)->apply($object);
+
+OverloadingTests::test_overloading_for_package($_)
+    for 'Overloading::RoleWithOverloads', ref $object;
+
+OverloadingTests::test_no_overloading_for_package(
+    'Overloading::RoleWithoutOverloads');
+
+$object->message('foo');
+
+OverloadingTests::test_overloading_for_object(
+    $object,
+    'object with Overloading::RoleWithOverloads and Overloading::RoleWithoutOverloads combined and applied to instance'
+);
+
+done_testing();
@@ -0,0 +1,33 @@
+use strict;
+use warnings;
+
+use Test::More 0.88;
+use Test::Warnings;
+use overload ();
+
+use lib 't/lib';
+
+use OverloadingTests;
+use Overloading::ClassWithCombiningRole;
+
+for my $role (
+    qw( Overloading::RoleWithOverloads Overloading::RoleWithoutOverloads )) {
+
+    ok(
+        Overloading::ClassWithCombiningRole->DOES($role),
+        "Overloading::ClassWithCombiningRole does $role role"
+    );
+}
+
+OverloadingTests::test_overloading_for_package($_) for qw(
+    Overloading::RoleWithOverloads
+    Overloading::ClassWithCombiningRole
+);
+
+OverloadingTests::test_no_overloading_for_package(
+    'Overloading::RoleWithoutOverloads');
+
+OverloadingTests::test_overloading_for_package(
+    'Overloading::ClassWithCombiningRole');
+
+done_testing();
@@ -0,0 +1,156 @@
+use strict;
+use warnings;
+
+use Test::More 0.88;
+use Test::Fatal;
+use Test::Warnings;
+
+use lib 't/lib';
+
+{
+    package Role::HasFallback;
+    use Moose::Role;
+
+    use overload
+        q{""}    => '_stringify',
+        fallback => 1;
+
+    sub _stringify { __PACKAGE__ }
+}
+
+{
+    package Role::NoFallback;
+    use Moose::Role;
+
+    use overload
+        '0+'    => '_numify',
+        fallback => 0;
+
+    sub _numify { 42 }
+}
+
+{
+    package Class1;
+    use Moose;
+    ::like(
+        ::exception { with qw( Role::HasFallback Role::NoFallback ) },
+        qr/\QWe have encountered an overloading conflict for the fallback during composition. This is a fatal error./,
+        'exception from fallback conflict during role summation'
+    );
+}
+
+{
+    package Role::NoOverloading;
+    use Moose::Role;
+
+    sub foo { 42 }
+}
+
+{
+    package Class2;
+    use Moose;
+    ::like(
+        ::exception { with qw( Role::HasFallback Role::NoFallback Role::NoOverloading ) },
+        qr/\QWe have encountered an overloading conflict for the fallback during composition. This is a fatal error./,
+        'exception from fallback conflict during role summation including role without overloading'
+    );
+}
+
+{
+    package Role::StringifiesViaSubref1;
+    use Moose::Role;
+
+    use overload q{""} => sub { 'foo' };
+}
+
+{
+    package Role::StringifiesViaSubref2;
+    use Moose::Role;
+
+    use overload q{""} => sub { 'bar' };
+}
+
+{
+    package Class3;
+    use Moose;
+    ::like(
+        ::exception { with qw( Role::StringifiesViaSubref1 Role::StringifiesViaSubref2 ) },
+        qr/\QThe two roles both overload the '""' operator. This is a fatal error./,
+        'exception when two roles with different subref overloading conflict during role summation'
+    );
+}
+
+{
+    package Class4;
+    use Moose;
+    ::like(
+        ::exception { with qw( Role::StringifiesViaSubref1 Role::StringifiesViaSubref2 Role::NoOverloading ) },
+        qr/\QThe two roles both overload the '""' operator. This is a fatal error./,
+        'exception when two roles with different subref overloading conflict during role summation including role without overloading'
+    );
+}
+
+{
+    package Role::StringifiesViaMethod1;
+    use Moose::Role;
+
+    use overload q{""} => '_stringify1';
+    sub _stringify1 { 'foo' }
+}
+
+{
+    package Role::StringifiesViaMethod2;
+    use Moose::Role;
+
+    use overload q{""} => '_stringify2';
+    sub _stringify2 { 'foo' }
+}
+
+{
+    package Class5;
+    use Moose;
+    ::like(
+        ::exception { with qw( Role::StringifiesViaMethod1 Role::StringifiesViaMethod2 ) },
+        qr/\QThe two roles both overload the '""' operator. This is a fatal error./,
+        'exception when two roles with different method overloading conflict during role summation'
+    );
+}
+
+{
+    package Class6;
+    use Moose;
+    ::like(
+        ::exception { with qw( Role::StringifiesViaMethod1 Role::StringifiesViaMethod2 Role::NoOverloading ) },
+        qr/\QThe two roles both overload the '""' operator. This is a fatal error./,
+        'exception when two roles with different method overloading conflict during role summation including role without overloading'
+    );
+}
+
+{
+    {
+        package R1;
+        use Moose::Role;
+
+        use overload '&{}' => 'as_code';
+
+        sub as_code { }
+    }
+
+    {
+        package R2;
+        use Moose::Role;
+        with 'R1';
+    }
+
+    {
+        package C1;
+        use Moose;
+        ::is(
+            ::exception { with 'R1', 'R2' },
+            undef,
+            'no conflict when class consumes multiple roles with the same overloading'
+        );
+    }
+}
+
+done_testing();
@@ -0,0 +1,36 @@
+use strict;
+use warnings;
+
+use Test::More 0.88;
+use Test::Warnings;
+
+use lib 't/lib';
+
+use OverloadingTests;
+
+{
+    package MyRole;
+    use Moose::Role;
+
+    has foo => ( is => 'ro' );
+
+    # Note ordering here. If metaclass reinitialization nukes attributes, this
+    # breaks.
+    with 'Overloading::RoleWithOverloads';
+}
+
+{
+    package MyClass;
+    use Moose;
+
+    with 'MyRole';
+}
+
+my $object = MyClass->new( foo => 21, message => 'foo' );
+
+OverloadingTests::test_overloading_for_object( $object, 'MyClass object' );
+
+is( $object->foo(), 21,
+    'foo attribute in MyClass is still present (from MyRole)' );
+
+done_testing();
@@ -0,0 +1,66 @@
+use strict;
+use warnings;
+
+use Test::More 0.88;
+use Test::Warnings;
+use overload ();
+
+use lib 't/lib';
+
+use OverloadingTests;
+use Overloading::ClassWithOneRole;
+
+ok(
+    Overloading::ClassWithOneRole->DOES('Overloading::RoleWithOverloads'),
+    'Overloading::ClassWithOneRole consumed Overloading::RoleWithOverloads',
+);
+
+OverloadingTests::test_overloading_for_package($_) for qw(
+    Overloading::RoleWithOverloads
+    Overloading::ClassWithOneRole
+);
+
+OverloadingTests::test_overloading_for_object(
+    'Overloading::ClassWithOneRole');
+
+{
+    package Role1;
+    use Moose::Role;
+    use overload
+        q{""}    => '_role1_stringify',
+        q{+}     => '_role1_plus',
+        fallback => 0;
+    sub _role1_stringify {__PACKAGE__}
+    sub _role1_plus      {42}
+}
+
+{
+    package Class1;
+    use Moose;
+    use overload
+        q{""}    => '_class1_stringify',
+        fallback => 1;
+    with 'Role1';
+    sub _class1_stringify {__PACKAGE__}
+}
+
+is(
+    Class1->meta->get_overload_fallback_value,
+    1,
+    'fallback setting for class overrides setting in composed role'
+);
+
+is(
+    Class1->new . q{},
+    'Class1',
+    'overload method for class overrides method in composed role'
+);
+
+my $overload = Class1->meta->get_overloaded_operator(q{+});
+is(
+    $overload->original_overload->associated_metaclass->name,
+    'Role1',
+    '+ overloading for Class1 originally came from Role1'
+);
+
+done_testing();
@@ -0,0 +1,31 @@
+use strict;
+use warnings;
+
+use Test::More 0.88;
+use Test::Warnings;
+use overload ();
+
+use lib 't/lib';
+
+use OverloadingTests;
+use Overloading::RoleWithOverloads;
+
+{
+    package MyClass;
+    use Moose;
+}
+
+my $object = MyClass->new;
+Overloading::RoleWithOverloads->meta->apply($object);
+
+OverloadingTests::test_overloading_for_package($_)
+    for 'Overloading::RoleWithOverloads', ref $object;
+
+$object->message('foo');
+
+OverloadingTests::test_overloading_for_object(
+    $object,
+    'object with Overloading::RoleWithOverloads applied to instance'
+);
+
+done_testing();
@@ -0,0 +1,58 @@
+use strict;
+use warnings;
+
+use Test::More 0.88;
+use Test::Warnings;
+use overload ();
+
+use lib 't/lib';
+
+use OverloadingTests;
+use Overloading::ClassConsumesRoleConsumesOverloads;
+
+for my $role (
+    qw( Overloading::RoleWithOverloads Overloading::RoleConsumesOverloads )) {
+
+    ok(
+        Overloading::ClassConsumesRoleConsumesOverloads->DOES($role),
+        "Overloading::ClassConsumesRoleConsumesOverloads does $role role"
+    );
+}
+
+OverloadingTests::test_overloading_for_package($_) for qw(
+    Overloading::RoleWithOverloads
+    Overloading::RoleConsumesOverloads
+    Overloading::ClassConsumesRoleConsumesOverloads
+);
+
+OverloadingTests::test_overloading_for_object(
+    'Overloading::ClassConsumesRoleConsumesOverloads');
+
+# These tests failed on 5.18+ in MXRWO - the key issue was the lack of a
+# "fallback" key being passed to overload.pm
+{
+    package MyRole1;
+    use Moose::Role;
+    use overload q{""} => '_stringify';
+    sub _stringify {__PACKAGE__}
+}
+
+{
+    package MyRole2;
+    use Moose::Role;
+    with 'MyRole1';
+}
+
+{
+    package Class1;
+    use Moose;
+    with 'MyRole2';
+}
+
+is(
+    Class1->new . q{},
+    'MyRole1',
+    'stringification overloading is passed through all roles'
+);
+
+done_testing();
@@ -1,8 +1,8 @@
-# See https://rt.cpan.org/Ticket/Display.html?id=46347
-
 use strict;
 use warnings;
 
+# See https://rt.cpan.org/Ticket/Display.html?id=46347
+
 use Test::More;
 use Test::Fatal;
 
@@ -50,6 +50,8 @@ use Moose::Meta::Role::Composite;
         Moose::Meta::Role::Application::RoleSummation->new->apply($c);
     }, undef, '... this composed okay' );
 
+    ok(!$c->is_anon, '... composite is not anonymous');
+
     ##... now nest 'em
     {
         my $c2 = Moose::Meta::Role::Composite->new(
@@ -74,6 +76,8 @@ use Moose::Meta::Role::Composite;
                 Role::Baz
                 Role::Gorch
             );
+
+        ok(!$c2->is_anon, '... composite is not anonymous');
     }
 }
 
@@ -129,7 +129,7 @@ isnt( exception {
 
     like(
         $exception,
-        qr/\QRole 'Foo' has encountered an 'override' method conflict during composition (Two 'override' methods of the same name encountered). This is fatal error./,
+        qr/\QRole 'Foo' has encountered an 'override' method conflict during composition (Two 'override' methods of the same name encountered). This is a fatal error./,
         "Foo & Bar, both roles are overriding test method");
 }
 
@@ -3,7 +3,6 @@ use warnings;
 
 use Test::More;
 use Test::Fatal;
-use Scalar::Util 'blessed';
 
 
 {
@@ -3,7 +3,6 @@ use warnings;
 
 use Test::More;
 use Test::Fatal;
-use Scalar::Util 'blessed';
 
 
 {
@@ -4,9 +4,6 @@ use warnings;
 use Test::Builder::Tester;
 use Test::More;
 
-plan skip_all => 'These tests are only for Test::Builder 0.9x'
-    if Test::Builder->VERSION >= 1.005;
-
 use Test::Moose;
 
 {
@@ -1,70 +0,0 @@
-use strict;
-use warnings;
-
-use Test::More;
-
-BEGIN {
-    use Test::More;
-    plan skip_all => 'These tests are only for Test::Builder 1.005+'
-        if Test::Builder->VERSION < 1.005;
-}
-
-{
-    package Foo;
-    use Moose;
-}
-
-{
-    package Bar;
-    use Moose;
-}
-
-package main;
-
-use Test::Moose;
-use TB2::Tester;
-use TB2::History;   # FIXME - this should not need to be loaded here explicitly
-
-my ($ret1, $ret2);
-my $capture = capture {
-    $ret1 = with_immutable {
-        ok(Foo->meta->is_mutable, 'is mutable');
-    } qw(Foo);
-
-    $ret2 = with_immutable {
-        ok(Bar->meta->find_method_by_name('new'), 'can find "new" method');
-    } qw(Bar);
-};
-
-my $results = $capture->results;
-
-my @tests = (
-    [
-        'first test runs while Foo is mutable' => { name => 'is mutable',
-                                                    is_pass => 1,
-                                                   },
-    ],
-    [
-        'first test runs while Foo is immutable' => { name => 'is mutable',
-                                                      is_pass => 0,
-                                                    },
-    ],
-    [
-        'can find "new" while Bar is mutable'   => { name => 'can find "new" method',
-                                                     is_pass => 1,
-                                                   },
-    ],
-    [
-        'can find "new" while Bar is immutable' => { name => 'can find "new" method',
-                                                     is_pass => 1,
-                                                   },
-    ],
-);
-
-result_like(shift(@$results), $_->[1], $_->[0]) foreach @tests;
-
-ok(!$ret1, 'one of the is_immutable tests failed');
-ok($ret2, 'the find_method_by_name tests passed');
-
-done_testing;
-
@@ -1,10 +1,10 @@
+use strict;
+use warnings;
+
 # In the case where a child type constraint's parent constraint fails,
 # the exception should reference the parent type constraint that actually
 # failed instead of always referencing the child'd type constraint
 
-use strict;
-use warnings;
-
 use Test::More;
 use Test::Fatal;
 
@@ -269,5 +269,3 @@ The benefits of doing this are:
   them into two pieces (one for the interface with a bunch of requires(), and
   another for the actual impl with the problematic attrs (and stub methods to
   fix the accessors) and method modifiers (dunno if this can even work at all)
-
-
@@ -4,6 +4,7 @@ use warnings;
 use Test::Fatal;
 use Test::More;
 
+use List::Util 1.33 ();
 use Moose::Util::TypeConstraints;
 
 #<<<
@@ -55,7 +56,7 @@ my $not_inlinable = find_type_constraint('NotInlinable');
 
     is(
         $aofi->_inline_check('$foo'),
-        q{( do { do {my $check = $foo;ref($check) eq "ARRAY" && &List::MoreUtils::all(sub { ( do { defined $_ && ! ref $_ && $_ !~ /Q/ } ) }, @{$check})} } )},
+        q{( do { do {my $check = $foo;ref($check) eq "ARRAY" && &List::Util::all(sub { ( do { defined $_ && ! ref $_ && $_ !~ /Q/ } ) }, @{$check})} } )},
         'got expected inline code for ArrayRef[Inlinable] constraint'
     );
 
@@ -84,7 +85,7 @@ subtype 'ArrayOfNotInlinable',
 
     is(
         $aofi->_inline_check('$foo'),
-        q{( do { do {my $check = $foo;ref($check) eq "ARRAY" && &List::MoreUtils::all(sub { ( do { defined $_ && ! ref $_ && $_ !~ /Q/ } ) }, @{$check})} } )},
+        q{( do { do {my $check = $foo;ref($check) eq "ARRAY" && &List::Util::all(sub { ( do { defined $_ && ! ref $_ && $_ !~ /Q/ } ) }, @{$check})} } )},
         'got expected inline code for ArrayOfInlinable constraint'
     );
 
@@ -108,7 +109,7 @@ subtype 'ArrayOfNotInlinable',
 
     is(
         $hoaofi->_inline_check('$foo'),
-        q{( do { do {my $check = $foo;ref($check) eq "HASH" && &List::MoreUtils::all(sub { ( do { do {my $check = $_;ref($check) eq "ARRAY" && &List::MoreUtils::all(sub { ( do { defined $_ && ! ref $_ && $_ !~ /Q/ } ) }, @{$check})} } ) }, values %{$check})} } )},
+        q{( do { do {my $check = $foo;ref($check) eq "HASH" && &List::Util::all(sub { ( do { do {my $check = $_;ref($check) eq "ARRAY" && &List::Util::all(sub { ( do { defined $_ && ! ref $_ && $_ !~ /Q/ } ) }, @{$check})} } ) }, values %{$check})} } )},
         'got expected inline code for HashRef[ArrayRef[Inlinable]] constraint'
     );
 
@@ -1,204 +0,0 @@
-use strict;
-use warnings;
-
-# Prevent namespace::autoclean from dying when we run tests from git checkout.
-use Class::MOP ();
-use Moose      ();
-BEGIN { $Class::MOP::VERSION ||= $Moose::VERSION ||= 3 }
-
-use Test::Fatal;
-use Test::Moose qw( with_immutable );
-use Test::More;
-
-use Test::Requires {
-    'Specio::Declare'           => '0.07',
-    'Specio::Library::Builtins' => '0.07',
-};
-
-{
-    package Foo;
-
-    use Moose;
-    use Specio::Library::Builtins;
-
-    has int => (
-        is  => 'ro',
-        isa => t('Int'),
-    );
-
-    has array_of_ints => (
-        is  => 'ro',
-        isa => t( 'ArrayRef', of => t('Int') ),
-    );
-
-    has hash_of_ints => (
-        is  => 'ro',
-        isa => t( 'HashRef', of => t('Int') ),
-    );
-}
-
-with_immutable(
-    sub {
-        my $is_immutable = shift;
-        subtest(
-            'Foo class' . ( $is_immutable ? ' (immutable)' : q{} ),
-            sub {
-
-                is(
-                    exception { Foo->new( int => 42 ) },
-                    undef,
-                    '42 is an acceptable int'
-                );
-
-                like(
-                    exception { Foo->new( int => 42.4 ) },
-                    qr/does not pass the type constraint.+for type named Int/,
-                    '42.4 is not an acceptable int'
-                );
-
-                is(
-                    exception { Foo->new( array_of_ints => [ 42, 84 ] ) },
-                    undef,
-                    '[ 42, 84 ] is an acceptable array of ints'
-                );
-
-                like(
-                    exception { Foo->new( array_of_ints => [ 42.4, 84 ] ) },
-                    qr/does not pass the type constraint.+for anonymous type/,
-                    '[ 42.4, 84 ] is an acceptable array of ints'
-                );
-
-                is(
-                    exception {
-                        Foo->new( hash_of_ints => { foo => 42, bar => 84 } );
-                    },
-                    undef,
-                    '{ foo => 42, bar => 84 } is an acceptable array of ints'
-                );
-
-                like(
-                    exception {
-                        Foo->new(
-                            hash_of_ints => { foo => 42.4, bar => 84 } );
-                    },
-                    qr/does not pass the type constraint.+for anonymous type/,
-                    '{ foo => 42.4, bar => 84 } is an acceptable array of ints'
-                );
-            }
-        );
-    },
-    'Foo'
-);
-
-{
-    package Bar;
-
-    use Moose;
-    use Specio::Declare;
-    use Specio::Library::Builtins;
-
-    my $array_of_ints = anon( parent => t( 'ArrayRef', of => t('Int') ) );
-
-    coerce(
-        $array_of_ints,
-        from  => t('Int'),
-        using => sub {
-            return [ $_[0] ];
-        }
-    );
-
-    has array_of_ints => (
-        is     => 'ro',
-        isa    => $array_of_ints,
-        coerce => 1,
-    );
-
-    my $hash_of_ints = anon( parent => t( 'HashRef', of => t('Int') ) );
-
-    coerce(
-        $hash_of_ints,
-        from  => t('Int'),
-        using => sub {
-            return { foo => $_[0] };
-        }
-    );
-
-    has hash_of_ints => (
-        is     => 'ro',
-        isa    => $hash_of_ints,
-        coerce => 1,
-    );
-}
-
-with_immutable(
-    sub {
-        my $is_immutable = shift;
-        subtest(
-            'Bar class' . ( $is_immutable ? ' (immutable)' : q{} ),
-            sub {
-
-                is(
-                    exception { Bar->new( array_of_ints => [ 42, 84 ] ) },
-                    undef,
-                    '[ 42, 84 ] is an acceptable array of ints'
-                );
-
-                like(
-                    exception { Bar->new( array_of_ints => [ 42.4, 84 ] ) },
-                    qr/does not pass the type constraint.+for anonymous type/,
-                    '[ 42.4, 84 ] is an acceptable array of ints'
-                );
-
-                {
-                    my $bar;
-                    is(
-                        exception { $bar = Bar->new( array_of_ints => 42 ) },
-                        undef,
-                        '42 is an acceptable array of ints with coercion'
-                    );
-
-                    is_deeply(
-                        $bar->array_of_ints(),
-                        [42],
-                        'int is coerced to single element arrayref'
-                    );
-                }
-
-                is(
-                    exception {
-                        Bar->new( hash_of_ints => { foo => 42, bar => 84 } );
-                    },
-                    undef,
-                    '{ foo => 42, bar => 84 } is an acceptable array of ints'
-                );
-
-                like(
-                    exception {
-                        Bar->new(
-                            hash_of_ints => { foo => 42.4, bar => 84 } );
-                    },
-                    qr/does not pass the type constraint.+for anonymous type/,
-                    '{ foo => 42.4, bar => 84 } is an acceptable array of ints'
-                );
-
-                {
-                    my $bar;
-                    is(
-                        exception { $bar = Bar->new( hash_of_ints => 42 ) },
-                        undef,
-                        '42 is an acceptable hash of ints with coercion'
-                    );
-
-                    is_deeply(
-                        $bar->hash_of_ints(),
-                        { foo => 42 },
-                        'int is coerced to single element hashref'
-                    );
-                }
-            }
-        );
-    },
-    'Bar'
-);
-
-done_testing();
@@ -3,11 +3,7 @@ use warnings;
 
 use Test::More;
 use Test::Fatal;
-
-use Test::Requires {
-    'IO::String' => '0.01', # skip all if not installed
-    'IO::File' => '0.01',
-};
+use Test::Requires qw(IO::String IO::File); # skip all if not installed
 
 {
     package Email::Moose;
@@ -0,0 +1,209 @@
+use strict;
+use warnings;
+
+# Prevent namespace::autoclean from dying when we run tests from git checkout.
+use Class::MOP ();
+use Moose      ();
+BEGIN { $Class::MOP::VERSION ||= $Moose::VERSION ||= 3 }
+
+use Test::Fatal;
+use Test::Moose qw( with_immutable );
+use Test::More;
+
+BEGIN {
+    plan skip_all => 'These tests requires Specio, which requires perl 5.010'
+        unless $] >= 5.010;
+}
+
+use Test::Requires {
+    'Specio::Declare'           => '0.10',
+    'Specio::Library::Builtins' => '0.10',
+};
+
+{
+    package Foo;
+
+    use Moose;
+    use Specio::Library::Builtins;
+
+    has int => (
+        is  => 'ro',
+        isa => t('Int'),
+    );
+
+    has array_of_ints => (
+        is  => 'ro',
+        isa => t( 'ArrayRef', of => t('Int') ),
+    );
+
+    has hash_of_ints => (
+        is  => 'ro',
+        isa => t( 'HashRef', of => t('Int') ),
+    );
+}
+
+with_immutable(
+    sub {
+        my $is_immutable = shift;
+        subtest(
+            'Foo class' . ( $is_immutable ? ' (immutable)' : q{} ),
+            sub {
+
+                is(
+                    exception { Foo->new( int => 42 ) },
+                    undef,
+                    '42 is an acceptable int'
+                );
+
+                like(
+                    exception { Foo->new( int => 42.4 ) },
+                    qr/does not pass the type constraint.+for type named Int/,
+                    '42.4 is not an acceptable int'
+                );
+
+                is(
+                    exception { Foo->new( array_of_ints => [ 42, 84 ] ) },
+                    undef,
+                    '[ 42, 84 ] is an acceptable array of ints'
+                );
+
+                like(
+                    exception { Foo->new( array_of_ints => [ 42.4, 84 ] ) },
+                    qr/does not pass the type constraint.+for anonymous type/,
+                    '[ 42.4, 84 ] is an acceptable array of ints'
+                );
+
+                is(
+                    exception {
+                        Foo->new( hash_of_ints => { foo => 42, bar => 84 } );
+                    },
+                    undef,
+                    '{ foo => 42, bar => 84 } is an acceptable array of ints'
+                );
+
+                like(
+                    exception {
+                        Foo->new(
+                            hash_of_ints => { foo => 42.4, bar => 84 } );
+                    },
+                    qr/does not pass the type constraint.+for anonymous type/,
+                    '{ foo => 42.4, bar => 84 } is an acceptable array of ints'
+                );
+            }
+        );
+    },
+    'Foo'
+);
+
+{
+    package Bar;
+
+    use Moose;
+    use Specio::Declare;
+    use Specio::Library::Builtins;
+
+    my $array_of_ints = anon( parent => t( 'ArrayRef', of => t('Int') ) );
+
+    coerce(
+        $array_of_ints,
+        from  => t('Int'),
+        using => sub {
+            return [ $_[0] ];
+        }
+    );
+
+    has array_of_ints => (
+        is     => 'ro',
+        isa    => $array_of_ints,
+        coerce => 1,
+    );
+
+    my $hash_of_ints = anon( parent => t( 'HashRef', of => t('Int') ) );
+
+    coerce(
+        $hash_of_ints,
+        from  => t('Int'),
+        using => sub {
+            return { foo => $_[0] };
+        }
+    );
+
+    has hash_of_ints => (
+        is     => 'ro',
+        isa    => $hash_of_ints,
+        coerce => 1,
+    );
+}
+
+with_immutable(
+    sub {
+        my $is_immutable = shift;
+        subtest(
+            'Bar class' . ( $is_immutable ? ' (immutable)' : q{} ),
+            sub {
+
+                is(
+                    exception { Bar->new( array_of_ints => [ 42, 84 ] ) },
+                    undef,
+                    '[ 42, 84 ] is an acceptable array of ints'
+                );
+
+                like(
+                    exception { Bar->new( array_of_ints => [ 42.4, 84 ] ) },
+                    qr/does not pass the type constraint.+for anonymous type/,
+                    '[ 42.4, 84 ] is an acceptable array of ints'
+                );
+
+                {
+                    my $bar;
+                    is(
+                        exception { $bar = Bar->new( array_of_ints => 42 ) },
+                        undef,
+                        '42 is an acceptable array of ints with coercion'
+                    );
+
+                    is_deeply(
+                        $bar->array_of_ints(),
+                        [42],
+                        'int is coerced to single element arrayref'
+                    );
+                }
+
+                is(
+                    exception {
+                        Bar->new( hash_of_ints => { foo => 42, bar => 84 } );
+                    },
+                    undef,
+                    '{ foo => 42, bar => 84 } is an acceptable array of ints'
+                );
+
+                like(
+                    exception {
+                        Bar->new(
+                            hash_of_ints => { foo => 42.4, bar => 84 } );
+                    },
+                    qr/does not pass the type constraint.+for anonymous type/,
+                    '{ foo => 42.4, bar => 84 } is an acceptable array of ints'
+                );
+
+                {
+                    my $bar;
+                    is(
+                        exception { $bar = Bar->new( hash_of_ints => 42 ) },
+                        undef,
+                        '42 is an acceptable hash of ints with coercion'
+                    );
+
+                    is_deeply(
+                        $bar->hash_of_ints(),
+                        { foo => 42 },
+                        'int is coerced to single element hashref'
+                    );
+                }
+            }
+        );
+    },
+    'Bar'
+);
+
+done_testing();
@@ -0,0 +1,98 @@
+use strict;
+use warnings;
+
+# this test was generated with Dist::Zilla::Plugin::Test::CheckBreaks 0.011
+
+use Test::More 0.88;
+
+SKIP: {
+    eval 'require Moose::Conflicts; Moose::Conflicts->check_conflicts';
+    skip('no Moose::Conflicts module found', 1) if not $INC{'Moose/Conflicts.pm'};
+
+    diag $@ if $@;
+    pass 'conflicts checked via Moose::Conflicts';
+}
+
+my $breaks = {
+  "Catalyst" => "<= 5.90049999",
+  "Config::MVP" => "<= 2.200004",
+  "Devel::REPL" => "<= 1.003020",
+  "Dist::Zilla::Plugin::Git" => "<= 2.016",
+  "Fey" => "<= 0.36",
+  "Fey::ORM" => "<= 0.42",
+  "File::ChangeNotify" => "<= 0.15",
+  "HTTP::Throwable" => "<= 0.017",
+  "KiokuDB" => "<= 0.51",
+  "Markdent" => "<= 0.16",
+  "Mason" => "<= 2.18",
+  "MooseX::ABC" => "<= 0.05",
+  "MooseX::Aliases" => "<= 0.08",
+  "MooseX::AlwaysCoerce" => "<= 0.13",
+  "MooseX::App" => "<= 1.22",
+  "MooseX::Attribute::Deflator" => "<= 2.1.7",
+  "MooseX::Attribute::Dependent" => "<= 1.1.0",
+  "MooseX::Attribute::Prototype" => "<= 0.10",
+  "MooseX::AttributeHelpers" => "<= 0.22",
+  "MooseX::AttributeIndexes" => "<= 1.0.0",
+  "MooseX::AttributeInflate" => "<= 0.02",
+  "MooseX::CascadeClearing" => "<= 0.03",
+  "MooseX::ClassAttribute" => "<= 0.26",
+  "MooseX::Constructor::AllErrors" => "<= 0.021",
+  "MooseX::Declare" => "<= 0.35",
+  "MooseX::FollowPBP" => "<= 0.02",
+  "MooseX::Getopt" => "<= 0.56",
+  "MooseX::InstanceTracking" => "<= 0.04",
+  "MooseX::LazyRequire" => "<= 0.06",
+  "MooseX::Meta::Attribute::Index" => "<= 0.04",
+  "MooseX::Meta::Attribute::Lvalue" => "<= 0.05",
+  "MooseX::Method::Signatures" => "<= 0.44",
+  "MooseX::MethodAttributes" => "<= 0.22",
+  "MooseX::NonMoose" => "<= 0.24",
+  "MooseX::Object::Pluggable" => "<= 0.0011",
+  "MooseX::POE" => "<= 0.214",
+  "MooseX::Params::Validate" => "<= 0.05",
+  "MooseX::PrivateSetters" => "<= 0.03",
+  "MooseX::Role::Cmd" => "<= 0.06",
+  "MooseX::Role::Parameterized" => "<= 1.00",
+  "MooseX::Role::WithOverloading" => "<= 0.14",
+  "MooseX::Runnable" => "<= 0.03",
+  "MooseX::Scaffold" => "<= 0.05",
+  "MooseX::SemiAffordanceAccessor" => "<= 0.05",
+  "MooseX::SetOnce" => "<= 0.100473",
+  "MooseX::Singleton" => "<= 0.25",
+  "MooseX::SlurpyConstructor" => "<= 1.1",
+  "MooseX::Storage" => "<= 0.42",
+  "MooseX::StrictConstructor" => "<= 0.12",
+  "MooseX::Traits" => "<= 0.11",
+  "MooseX::Types" => "<= 0.19",
+  "MooseX::Types::Parameterizable" => "<= 0.05",
+  "MooseX::Types::Set::Object" => "<= 0.03",
+  "MooseX::Types::Signal" => "<= 1.101930",
+  "MooseX::UndefTolerant" => "<= 0.11",
+  "PRANG" => "<= 0.14",
+  "Pod::Elemental" => "<= 0.093280",
+  "Pod::Weaver" => "<= 3.101638",
+  "Reaction" => "<= 0.002003",
+  "Test::Able" => "<= 0.10",
+  "Test::CleanNamespaces" => "<= 0.03",
+  "Test::Moose::More" => "<= 0.022",
+  "Test::TempDir" => "<= 0.05",
+  "Throwable" => "<= 0.102080",
+  "namespace::autoclean" => "<= 0.08"
+};
+
+use CPAN::Meta::Requirements;
+my $reqs = CPAN::Meta::Requirements->new;
+$reqs->add_string_requirement($_, $breaks->{$_}) foreach keys %$breaks;
+
+use CPAN::Meta::Check 0.007 'check_requirements';
+our $result = check_requirements($reqs, 'conflicts');
+
+if (my @breaks = grep { defined $result->{$_} } keys %$result)
+{
+    diag 'Breakages found with Moose:';
+    diag "$result->{$_}" for sort @breaks;
+    diag "\n", 'You should now update these modules!';
+}
+
+done_testing;
@@ -119,10 +119,10 @@ XS_EXTERNAL(boot_Class__MOP__Mixin__AttributeCore);
 XS_EXTERNAL(boot_Class__MOP__Method);
 XS_EXTERNAL(boot_Class__MOP__Method__Inlined);
 XS_EXTERNAL(boot_Class__MOP__Method__Generated);
-XS_EXTERNAL(boot_Class__MOP__Method__Overload);
 XS_EXTERNAL(boot_Class__MOP__Class);
 XS_EXTERNAL(boot_Class__MOP__Attribute);
 XS_EXTERNAL(boot_Class__MOP__Instance);
+XS_EXTERNAL(boot_Moose__Meta__Role__Application__ToInstance);
 
 MODULE = Moose  PACKAGE = Moose::Exporter
 
@@ -139,10 +139,10 @@ BOOT:
     MOP_CALL_BOOT (boot_Class__MOP__Method);
     MOP_CALL_BOOT (boot_Class__MOP__Method__Inlined);
     MOP_CALL_BOOT (boot_Class__MOP__Method__Generated);
-    MOP_CALL_BOOT (boot_Class__MOP__Method__Overload);
     MOP_CALL_BOOT (boot_Class__MOP__Class);
     MOP_CALL_BOOT (boot_Class__MOP__Attribute);
     MOP_CALL_BOOT (boot_Class__MOP__Instance);
+    MOP_CALL_BOOT (boot_Moose__Meta__Role__Application__ToInstance);
 
 void
 _flag_as_reexport (SV *sv)
@@ -0,0 +1,186 @@
+/*
+ * This file was generated automatically by ExtUtils::ParseXS version 3.25 from the
+ * contents of Overload.xs. Do not edit this file, edit Overload.xs instead.
+ *
+ *    ANY CHANGES MADE HERE WILL BE LOST!
+ *
+ */
+
+#line 1 "xs/Overload.xs"
+#include "mop.h"
+
+#line 13 "xs/Overload.c"
+#ifndef PERL_UNUSED_VAR
+#  define PERL_UNUSED_VAR(var) if (0) var = var
+#endif
+
+#ifndef dVAR
+#  define dVAR		dNOOP
+#endif
+
+
+/* This stuff is not part of the API! You have been warned. */
+#ifndef PERL_VERSION_DECIMAL
+#  define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
+#endif
+#ifndef PERL_DECIMAL_VERSION
+#  define PERL_DECIMAL_VERSION \
+	  PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
+#endif
+#ifndef PERL_VERSION_GE
+#  define PERL_VERSION_GE(r,v,s) \
+	  (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
+#endif
+#ifndef PERL_VERSION_LE
+#  define PERL_VERSION_LE(r,v,s) \
+	  (PERL_DECIMAL_VERSION <= PERL_VERSION_DECIMAL(r,v,s))
+#endif
+
+/* XS_INTERNAL is the explicit static-linkage variant of the default
+ * XS macro.
+ *
+ * XS_EXTERNAL is the same as XS_INTERNAL except it does not include
+ * "STATIC", ie. it exports XSUB symbols. You probably don't want that
+ * for anything but the BOOT XSUB.
+ *
+ * See XSUB.h in core!
+ */
+
+
+/* TODO: This might be compatible further back than 5.10.0. */
+#if PERL_VERSION_GE(5, 10, 0) && PERL_VERSION_LE(5, 15, 1)
+#  undef XS_EXTERNAL
+#  undef XS_INTERNAL
+#  if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
+#    define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
+#    define XS_INTERNAL(name) STATIC XSPROTO(name)
+#  endif
+#  if defined(__SYMBIAN32__)
+#    define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
+#    define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
+#  endif
+#  ifndef XS_EXTERNAL
+#    if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
+#      define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
+#      define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__)
+#    else
+#      ifdef __cplusplus
+#        define XS_EXTERNAL(name) extern "C" XSPROTO(name)
+#        define XS_INTERNAL(name) static XSPROTO(name)
+#      else
+#        define XS_EXTERNAL(name) XSPROTO(name)
+#        define XS_INTERNAL(name) STATIC XSPROTO(name)
+#      endif
+#    endif
+#  endif
+#endif
+
+/* perl >= 5.10.0 && perl <= 5.15.1 */
+
+
+/* The XS_EXTERNAL macro is used for functions that must not be static
+ * like the boot XSUB of a module. If perl didn't have an XS_EXTERNAL
+ * macro defined, the best we can do is assume XS is the same.
+ * Dito for XS_INTERNAL.
+ */
+#ifndef XS_EXTERNAL
+#  define XS_EXTERNAL(name) XS(name)
+#endif
+#ifndef XS_INTERNAL
+#  define XS_INTERNAL(name) XS(name)
+#endif
+
+/* Now, finally, after all this mess, we want an ExtUtils::ParseXS
+ * internal macro that we're free to redefine for varying linkage due
+ * to the EXPORT_XSUB_SYMBOLS XS keyword. This is internal, use
+ * XS_EXTERNAL(name) or XS_INTERNAL(name) in your code if you need to!
+ */
+
+#undef XS_EUPXS
+#if defined(PERL_EUPXS_ALWAYS_EXPORT)
+#  define XS_EUPXS(name) XS_EXTERNAL(name)
+#else
+   /* default to internal */
+#  define XS_EUPXS(name) XS_INTERNAL(name)
+#endif
+
+#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE
+#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)
+
+/* prototype to pass -Wmissing-prototypes */
+STATIC void
+S_croak_xs_usage(pTHX_ const CV *const cv, const char *const params);
+
+STATIC void
+S_croak_xs_usage(pTHX_ const CV *const cv, const char *const params)
+{
+    const GV *const gv = CvGV(cv);
+
+    PERL_ARGS_ASSERT_CROAK_XS_USAGE;
+
+    if (gv) {
+        const char *const gvname = GvNAME(gv);
+        const HV *const stash = GvSTASH(gv);
+        const char *const hvname = stash ? HvNAME(stash) : NULL;
+
+        if (hvname)
+            Perl_croak(aTHX_ "Usage: %s::%s(%s)", hvname, gvname, params);
+        else
+            Perl_croak(aTHX_ "Usage: %s(%s)", gvname, params);
+    } else {
+        /* Pants. I don't think that it should be possible to get here. */
+        Perl_croak(aTHX_ "Usage: CODE(0x%"UVxf")(%s)", PTR2UV(cv), params);
+    }
+}
+#undef  PERL_ARGS_ASSERT_CROAK_XS_USAGE
+
+#ifdef PERL_IMPLICIT_CONTEXT
+#define croak_xs_usage(a,b)    S_croak_xs_usage(aTHX_ a,b)
+#else
+#define croak_xs_usage        S_croak_xs_usage
+#endif
+
+#endif
+
+/* NOTE: the prototype of newXSproto() is different in versions of perls,
+ * so we define a portable version of newXSproto()
+ */
+#ifdef newXS_flags
+#define newXSproto_portable(name, c_impl, file, proto) newXS_flags(name, c_impl, file, proto, 0)
+#else
+#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
+#endif /* !defined(newXS_flags) */
+
+#line 155 "xs/Overload.c"
+#ifdef __cplusplus
+extern "C"
+#endif
+XS_EXTERNAL(boot_Class__MOP__Method__Overload); /* prototype to pass -Wmissing-prototypes */
+XS_EXTERNAL(boot_Class__MOP__Method__Overload)
+{
+    dVAR; dXSARGS;
+
+    PERL_UNUSED_VAR(cv); /* -W */
+    PERL_UNUSED_VAR(items); /* -W */
+#ifdef XS_APIVERSION_BOOTCHECK
+    XS_APIVERSION_BOOTCHECK;
+#endif
+    XS_VERSION_BOOTCHECK;
+
+
+    /* Initialisation Section */
+
+#line 8 "xs/Overload.xs"
+    INSTALL_SIMPLE_READER(Method::Overload, operator);
+
+#line 177 "xs/Overload.c"
+
+    /* End of Initialisation Section */
+
+#if (PERL_REVISION == 5 && PERL_VERSION >= 9)
+  if (PL_unitcheckav)
+       call_list(PL_scopestack_ix, PL_unitcheckav);
+#endif
+    XSRETURN_YES;
+}
+
@@ -1,8 +0,0 @@
-#include "mop.h"
-
-MODULE = Class::MOP::Method::Overload   PACKAGE = Class::MOP::Method::Overload
-
-PROTOTYPES: DISABLE
-
-BOOT:
-    INSTALL_SIMPLE_READER(Method::Overload, operator);
@@ -0,0 +1,63 @@
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+static void
+S_reset_amagic (pTHX_ SV *rv, const bool on)
+{
+    /* It is assumed that you've already turned magic on/off on rv  */
+
+    SV *sva;
+    SV *const target = SvRV (rv);
+
+    /* Less 1 for the reference we've already dealt with.  */
+    U32 how_many = SvREFCNT (target) - 1;
+    MAGIC *mg;
+
+    if (SvMAGICAL (target) && (mg = mg_find (target, PERL_MAGIC_backref))) {
+        /* Back references also need to be found, but aren't part of the target's reference count. */
+        how_many += 1 + av_len ((AV *)mg->mg_obj);
+    }
+
+    if (!how_many) {
+        /* There was only 1 reference to this object.  */
+        return;
+    }
+
+    for (sva = PL_sv_arenaroot; sva; sva = (SV *)SvANY (sva)) {
+        register const SV *const svend = &sva[SvREFCNT (sva)];
+        register SV *sv;
+        for (sv = sva + 1; sv < svend; ++sv) {
+            if (SvTYPE (sv) != SVTYPEMASK
+             && ((sv->sv_flags & SVf_ROK) == SVf_ROK)
+             && SvREFCNT (sv)
+             && SvRV (sv) == target
+             && sv != rv) {
+                if (on) {
+                    SvAMAGIC_on (sv);
+                }
+                else {
+                    SvAMAGIC_off (sv);
+                }
+
+                if (--how_many == 0) {
+                    /* We have found them all. */
+                    return;
+                }
+            }
+        }
+    }
+}
+
+MODULE = Moose::Meta::Role::Application::ToInstance PACKAGE = Moose::Meta::Role::Application::ToInstance
+
+PROTOTYPES: DISABLE
+
+void
+_reset_amagic (rv)
+        SV *rv
+    CODE:
+        if (Gv_AMG (SvSTASH (SvRV (rv))) && !SvAMAGIC (rv)) {
+            SvAMAGIC_on (rv);
+            S_reset_amagic (aTHX_ rv, TRUE);
+        }
@@ -1,433 +0,0 @@
-use 5.006;
-use strict;
-use warnings;
-
-# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.039
-
-use Test::More 0.94 tests => 358 + ($ENV{AUTHOR_TESTING} ? 1 : 0);
-
-
-
-my @module_files = (
-    'Class/MOP.pm',
-    'Class/MOP/Class/Immutable/Trait.pm',
-    'Class/MOP/Deprecated.pm',
-    'Class/MOP/Instance.pm',
-    'Class/MOP/Method.pm',
-    'Class/MOP/Method/Generated.pm',
-    'Class/MOP/Method/Meta.pm',
-    'Class/MOP/Method/Overload.pm',
-    'Class/MOP/MiniTrait.pm',
-    'Class/MOP/Mixin.pm',
-    'Class/MOP/Mixin/AttributeCore.pm',
-    'Class/MOP/Mixin/HasMethods.pm',
-    'Class/MOP/Object.pm',
-    'Moose.pm',
-    'Moose/Conflicts.pm',
-    'Moose/Deprecated.pm',
-    'Moose/Exception.pm',
-    'Moose/Exception/AccessorMustReadWrite.pm',
-    'Moose/Exception/AddParameterizableTypeTakesParameterizableType.pm',
-    'Moose/Exception/AddRoleTakesAMooseMetaRoleInstance.pm',
-    'Moose/Exception/AddRoleToARoleTakesAMooseMetaRole.pm',
-    'Moose/Exception/ApplyTakesABlessedInstance.pm',
-    'Moose/Exception/AttachToClassNeedsAClassMOPClassInstanceOrASubclass.pm',
-    'Moose/Exception/AttributeConflictInRoles.pm',
-    'Moose/Exception/AttributeConflictInSummation.pm',
-    'Moose/Exception/AttributeExtensionIsNotSupportedInRoles.pm',
-    'Moose/Exception/AttributeIsRequired.pm',
-    'Moose/Exception/AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass.pm',
-    'Moose/Exception/AttributeNamesDoNotMatch.pm',
-    'Moose/Exception/AttributeValueIsNotAnObject.pm',
-    'Moose/Exception/AttributeValueIsNotDefined.pm',
-    'Moose/Exception/AutoDeRefNeedsArrayRefOrHashRef.pm',
-    'Moose/Exception/BadOptionFormat.pm',
-    'Moose/Exception/BothBuilderAndDefaultAreNotAllowed.pm',
-    'Moose/Exception/BuilderDoesNotExist.pm',
-    'Moose/Exception/BuilderMethodNotSupportedForAttribute.pm',
-    'Moose/Exception/BuilderMethodNotSupportedForInlineAttribute.pm',
-    'Moose/Exception/BuilderMustBeAMethodName.pm',
-    'Moose/Exception/CallingMethodOnAnImmutableInstance.pm',
-    'Moose/Exception/CallingReadOnlyMethodOnAnImmutableInstance.pm',
-    'Moose/Exception/CanExtendOnlyClasses.pm',
-    'Moose/Exception/CanOnlyConsumeRole.pm',
-    'Moose/Exception/CanOnlyWrapBlessedCode.pm',
-    'Moose/Exception/CanReblessOnlyIntoASubclass.pm',
-    'Moose/Exception/CanReblessOnlyIntoASuperclass.pm',
-    'Moose/Exception/CannotAddAdditionalTypeCoercionsToUnion.pm',
-    'Moose/Exception/CannotAddAsAnAttributeToARole.pm',
-    'Moose/Exception/CannotApplyBaseClassRolesToRole.pm',
-    'Moose/Exception/CannotAssignValueToReadOnlyAccessor.pm',
-    'Moose/Exception/CannotAugmentIfLocalMethodPresent.pm',
-    'Moose/Exception/CannotAugmentNoSuperMethod.pm',
-    'Moose/Exception/CannotAutoDerefWithoutIsa.pm',
-    'Moose/Exception/CannotAutoDereferenceTypeConstraint.pm',
-    'Moose/Exception/CannotCalculateNativeType.pm',
-    'Moose/Exception/CannotCallAnAbstractBaseMethod.pm',
-    'Moose/Exception/CannotCallAnAbstractMethod.pm',
-    'Moose/Exception/CannotCoerceAWeakRef.pm',
-    'Moose/Exception/CannotCoerceAttributeWhichHasNoCoercion.pm',
-    'Moose/Exception/CannotCreateHigherOrderTypeWithoutATypeParameter.pm',
-    'Moose/Exception/CannotCreateMethodAliasLocalMethodIsPresent.pm',
-    'Moose/Exception/CannotCreateMethodAliasLocalMethodIsPresentInClass.pm',
-    'Moose/Exception/CannotDelegateLocalMethodIsPresent.pm',
-    'Moose/Exception/CannotDelegateWithoutIsa.pm',
-    'Moose/Exception/CannotFindDelegateMetaclass.pm',
-    'Moose/Exception/CannotFindType.pm',
-    'Moose/Exception/CannotFindTypeGivenToMatchOnType.pm',
-    'Moose/Exception/CannotFixMetaclassCompatibility.pm',
-    'Moose/Exception/CannotGenerateInlineConstraint.pm',
-    'Moose/Exception/CannotInitializeMooseMetaRoleComposite.pm',
-    'Moose/Exception/CannotInlineTypeConstraintCheck.pm',
-    'Moose/Exception/CannotLocatePackageInINC.pm',
-    'Moose/Exception/CannotMakeMetaclassCompatible.pm',
-    'Moose/Exception/CannotOverrideALocalMethod.pm',
-    'Moose/Exception/CannotOverrideBodyOfMetaMethods.pm',
-    'Moose/Exception/CannotOverrideLocalMethodIsPresent.pm',
-    'Moose/Exception/CannotOverrideNoSuperMethod.pm',
-    'Moose/Exception/CannotRegisterUnnamedTypeConstraint.pm',
-    'Moose/Exception/CannotUseLazyBuildAndDefaultSimultaneously.pm',
-    'Moose/Exception/CircularReferenceInAlso.pm',
-    'Moose/Exception/ClassDoesNotHaveInitMeta.pm',
-    'Moose/Exception/ClassDoesTheExcludedRole.pm',
-    'Moose/Exception/ClassNamesDoNotMatch.pm',
-    'Moose/Exception/CloneObjectExpectsAnInstanceOfMetaclass.pm',
-    'Moose/Exception/CodeBlockMustBeACodeRef.pm',
-    'Moose/Exception/CoercingWithoutCoercions.pm',
-    'Moose/Exception/CoercionAlreadyExists.pm',
-    'Moose/Exception/CoercionNeedsTypeConstraint.pm',
-    'Moose/Exception/ConflictDetectedInCheckRoleExclusions.pm',
-    'Moose/Exception/ConflictDetectedInCheckRoleExclusionsInToClass.pm',
-    'Moose/Exception/ConstructClassInstanceTakesPackageName.pm',
-    'Moose/Exception/CouldNotCreateMethod.pm',
-    'Moose/Exception/CouldNotCreateWriter.pm',
-    'Moose/Exception/CouldNotEvalConstructor.pm',
-    'Moose/Exception/CouldNotEvalDestructor.pm',
-    'Moose/Exception/CouldNotFindTypeConstraintToCoerceFrom.pm',
-    'Moose/Exception/CouldNotGenerateInlineAttributeMethod.pm',
-    'Moose/Exception/CouldNotLocateTypeConstraintForUnion.pm',
-    'Moose/Exception/CouldNotParseType.pm',
-    'Moose/Exception/CreateMOPClassTakesArrayRefOfAttributes.pm',
-    'Moose/Exception/CreateMOPClassTakesArrayRefOfSuperclasses.pm',
-    'Moose/Exception/CreateMOPClassTakesHashRefOfMethods.pm',
-    'Moose/Exception/CreateTakesArrayRefOfRoles.pm',
-    'Moose/Exception/CreateTakesHashRefOfAttributes.pm',
-    'Moose/Exception/CreateTakesHashRefOfMethods.pm',
-    'Moose/Exception/DefaultToMatchOnTypeMustBeCodeRef.pm',
-    'Moose/Exception/DelegationToAClassWhichIsNotLoaded.pm',
-    'Moose/Exception/DelegationToARoleWhichIsNotLoaded.pm',
-    'Moose/Exception/DelegationToATypeWhichIsNotAClass.pm',
-    'Moose/Exception/DoesRequiresRoleName.pm',
-    'Moose/Exception/EnumCalledWithAnArrayRefAndAdditionalArgs.pm',
-    'Moose/Exception/EnumValuesMustBeString.pm',
-    'Moose/Exception/ExtendsMissingArgs.pm',
-    'Moose/Exception/HandlesMustBeAHashRef.pm',
-    'Moose/Exception/IllegalInheritedOptions.pm',
-    'Moose/Exception/IllegalMethodTypeToAddMethodModifier.pm',
-    'Moose/Exception/IncompatibleMetaclassOfSuperclass.pm',
-    'Moose/Exception/InitMetaRequiresClass.pm',
-    'Moose/Exception/InitializeTakesUnBlessedPackageName.pm',
-    'Moose/Exception/InstanceBlessedIntoWrongClass.pm',
-    'Moose/Exception/InstanceMustBeABlessedReference.pm',
-    'Moose/Exception/InvalidArgPassedToMooseUtilMetaRole.pm',
-    'Moose/Exception/InvalidArgumentToMethod.pm',
-    'Moose/Exception/InvalidArgumentsToTraitAliases.pm',
-    'Moose/Exception/InvalidBaseTypeGivenToCreateParameterizedTypeConstraint.pm',
-    'Moose/Exception/InvalidHandleValue.pm',
-    'Moose/Exception/InvalidHasProvidedInARole.pm',
-    'Moose/Exception/InvalidNameForType.pm',
-    'Moose/Exception/InvalidRoleApplication.pm',
-    'Moose/Exception/InvalidTypeConstraint.pm',
-    'Moose/Exception/InvalidTypeGivenToCreateParameterizedTypeConstraint.pm',
-    'Moose/Exception/InvalidValueForIs.pm',
-    'Moose/Exception/IsaDoesNotDoTheRole.pm',
-    'Moose/Exception/IsaLacksDoesMethod.pm',
-    'Moose/Exception/LazyAttributeNeedsADefault.pm',
-    'Moose/Exception/Legacy.pm',
-    'Moose/Exception/MOPAttributeNewNeedsAttributeName.pm',
-    'Moose/Exception/MatchActionMustBeACodeRef.pm',
-    'Moose/Exception/MessageParameterMustBeCodeRef.pm',
-    'Moose/Exception/MetaclassIsAClassNotASubclassOfGivenMetaclass.pm',
-    'Moose/Exception/MetaclassIsARoleNotASubclassOfGivenMetaclass.pm',
-    'Moose/Exception/MetaclassIsNotASubclassOfGivenMetaclass.pm',
-    'Moose/Exception/MetaclassMustBeASubclassOfMooseMetaClass.pm',
-    'Moose/Exception/MetaclassMustBeASubclassOfMooseMetaRole.pm',
-    'Moose/Exception/MetaclassMustBeDerivedFromClassMOPClass.pm',
-    'Moose/Exception/MetaclassNotLoaded.pm',
-    'Moose/Exception/MetaclassTypeIncompatible.pm',
-    'Moose/Exception/MethodExpectedAMetaclassObject.pm',
-    'Moose/Exception/MethodExpectsFewerArgs.pm',
-    'Moose/Exception/MethodExpectsMoreArgs.pm',
-    'Moose/Exception/MethodModifierNeedsMethodName.pm',
-    'Moose/Exception/MethodNameConflictInRoles.pm',
-    'Moose/Exception/MethodNameNotFoundInInheritanceHierarchy.pm',
-    'Moose/Exception/MethodNameNotGiven.pm',
-    'Moose/Exception/MustDefineAMethodName.pm',
-    'Moose/Exception/MustDefineAnAttributeName.pm',
-    'Moose/Exception/MustHaveAtLeastOneValueToEnumerate.pm',
-    'Moose/Exception/MustPassAHashOfOptions.pm',
-    'Moose/Exception/MustPassAMooseMetaRoleInstanceOrSubclass.pm',
-    'Moose/Exception/MustPassAPackageNameOrAnExistingClassMOPPackageInstance.pm',
-    'Moose/Exception/MustPassEvenNumberOfArguments.pm',
-    'Moose/Exception/MustPassEvenNumberOfAttributeOptions.pm',
-    'Moose/Exception/MustProvideANameForTheAttribute.pm',
-    'Moose/Exception/MustSpecifyAtleastOneMethod.pm',
-    'Moose/Exception/MustSpecifyAtleastOneRole.pm',
-    'Moose/Exception/MustSpecifyAtleastOneRoleToApplicant.pm',
-    'Moose/Exception/MustSupplyAClassMOPAttributeInstance.pm',
-    'Moose/Exception/MustSupplyADelegateToMethod.pm',
-    'Moose/Exception/MustSupplyAMetaclass.pm',
-    'Moose/Exception/MustSupplyAMooseMetaAttributeInstance.pm',
-    'Moose/Exception/MustSupplyAnAccessorTypeToConstructWith.pm',
-    'Moose/Exception/MustSupplyAnAttributeToConstructWith.pm',
-    'Moose/Exception/MustSupplyArrayRefAsCurriedArguments.pm',
-    'Moose/Exception/MustSupplyPackageNameAndName.pm',
-    'Moose/Exception/NeedsTypeConstraintUnionForTypeCoercionUnion.pm',
-    'Moose/Exception/NeitherAttributeNorAttributeNameIsGiven.pm',
-    'Moose/Exception/NeitherClassNorClassNameIsGiven.pm',
-    'Moose/Exception/NeitherRoleNorRoleNameIsGiven.pm',
-    'Moose/Exception/NeitherTypeNorTypeNameIsGiven.pm',
-    'Moose/Exception/NoAttributeFoundInSuperClass.pm',
-    'Moose/Exception/NoBodyToInitializeInAnAbstractBaseClass.pm',
-    'Moose/Exception/NoCasesMatched.pm',
-    'Moose/Exception/NoConstraintCheckForTypeConstraint.pm',
-    'Moose/Exception/NoDestructorClassSpecified.pm',
-    'Moose/Exception/NoImmutableTraitSpecifiedForClass.pm',
-    'Moose/Exception/NoParentGivenToSubtype.pm',
-    'Moose/Exception/OnlyInstancesCanBeCloned.pm',
-    'Moose/Exception/OperatorIsRequired.pm',
-    'Moose/Exception/OverrideConflictInComposition.pm',
-    'Moose/Exception/OverrideConflictInSummation.pm',
-    'Moose/Exception/PackageDoesNotUseMooseExporter.pm',
-    'Moose/Exception/PackageNameAndNameParamsNotGivenToWrap.pm',
-    'Moose/Exception/PackagesAndModulesAreNotCachable.pm',
-    'Moose/Exception/ParameterIsNotSubtypeOfParent.pm',
-    'Moose/Exception/ReferencesAreNotAllowedAsDefault.pm',
-    'Moose/Exception/RequiredAttributeLacksInitialization.pm',
-    'Moose/Exception/RequiredAttributeNeedsADefault.pm',
-    'Moose/Exception/RequiredMethodsImportedByClass.pm',
-    'Moose/Exception/RequiredMethodsNotImplementedByClass.pm',
-    'Moose/Exception/Role/Attribute.pm',
-    'Moose/Exception/Role/AttributeName.pm',
-    'Moose/Exception/Role/Class.pm',
-    'Moose/Exception/Role/EitherAttributeOrAttributeName.pm',
-    'Moose/Exception/Role/Instance.pm',
-    'Moose/Exception/Role/InvalidAttributeOptions.pm',
-    'Moose/Exception/Role/Method.pm',
-    'Moose/Exception/Role/ParamsHash.pm',
-    'Moose/Exception/Role/Role.pm',
-    'Moose/Exception/Role/RoleForCreate.pm',
-    'Moose/Exception/Role/RoleForCreateMOPClass.pm',
-    'Moose/Exception/Role/TypeConstraint.pm',
-    'Moose/Exception/RoleDoesTheExcludedRole.pm',
-    'Moose/Exception/RoleExclusionConflict.pm',
-    'Moose/Exception/RoleNameRequired.pm',
-    'Moose/Exception/RoleNameRequiredForMooseMetaRole.pm',
-    'Moose/Exception/RoleNamesDoNotMatch.pm',
-    'Moose/Exception/RolesDoNotSupportAugment.pm',
-    'Moose/Exception/RolesDoNotSupportExtends.pm',
-    'Moose/Exception/RolesDoNotSupportInner.pm',
-    'Moose/Exception/RolesDoNotSupportRegexReferencesForMethodModifiers.pm',
-    'Moose/Exception/RolesInCreateTakesAnArrayRef.pm',
-    'Moose/Exception/RolesListMustBeInstancesOfMooseMetaRole.pm',
-    'Moose/Exception/SingleParamsToNewMustBeHashRef.pm',
-    'Moose/Exception/TriggerMustBeACodeRef.pm',
-    'Moose/Exception/TypeConstraintCannotBeUsedForAParameterizableType.pm',
-    'Moose/Exception/TypeConstraintIsAlreadyCreated.pm',
-    'Moose/Exception/TypeNamesDoNotMatch.pm',
-    'Moose/Exception/TypeParameterMustBeMooseMetaType.pm',
-    'Moose/Exception/UnableToCanonicalizeHandles.pm',
-    'Moose/Exception/UnableToCanonicalizeNonRolePackage.pm',
-    'Moose/Exception/UnableToRecognizeDelegateMetaclass.pm',
-    'Moose/Exception/UndefinedHashKeysPassedToMethod.pm',
-    'Moose/Exception/UnionCalledWithAnArrayRefAndAdditionalArgs.pm',
-    'Moose/Exception/UnionTakesAtleastTwoTypeNames.pm',
-    'Moose/Exception/ValidationFailedForInlineTypeConstraint.pm',
-    'Moose/Exception/ValidationFailedForTypeConstraint.pm',
-    'Moose/Exception/WrapTakesACodeRefToBless.pm',
-    'Moose/Exception/WrongTypeConstraintGiven.pm',
-    'Moose/Exporter.pm',
-    'Moose/Meta/Attribute/Native/Trait.pm',
-    'Moose/Meta/Attribute/Native/Trait/Array.pm',
-    'Moose/Meta/Attribute/Native/Trait/Bool.pm',
-    'Moose/Meta/Attribute/Native/Trait/Code.pm',
-    'Moose/Meta/Attribute/Native/Trait/Counter.pm',
-    'Moose/Meta/Attribute/Native/Trait/Hash.pm',
-    'Moose/Meta/Attribute/Native/Trait/Number.pm',
-    'Moose/Meta/Attribute/Native/Trait/String.pm',
-    'Moose/Meta/Class.pm',
-    'Moose/Meta/Class/Immutable/Trait.pm',
-    'Moose/Meta/Instance.pm',
-    'Moose/Meta/Method.pm',
-    'Moose/Meta/Method/Accessor.pm',
-    'Moose/Meta/Method/Accessor/Native.pm',
-    'Moose/Meta/Method/Accessor/Native/Array.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/Writer.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/accessor.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/clear.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/count.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/delete.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/elements.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/first.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/first_index.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/get.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/grep.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/insert.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/is_empty.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/join.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/map.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/natatime.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/pop.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/push.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/reduce.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/set.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/shallow_clone.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/shift.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/shuffle.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/sort.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/sort_in_place.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/splice.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/uniq.pm',
-    'Moose/Meta/Method/Accessor/Native/Array/unshift.pm',
-    'Moose/Meta/Method/Accessor/Native/Bool/not.pm',
-    'Moose/Meta/Method/Accessor/Native/Bool/set.pm',
-    'Moose/Meta/Method/Accessor/Native/Bool/toggle.pm',
-    'Moose/Meta/Method/Accessor/Native/Bool/unset.pm',
-    'Moose/Meta/Method/Accessor/Native/Code/execute.pm',
-    'Moose/Meta/Method/Accessor/Native/Code/execute_method.pm',
-    'Moose/Meta/Method/Accessor/Native/Collection.pm',
-    'Moose/Meta/Method/Accessor/Native/Counter/Writer.pm',
-    'Moose/Meta/Method/Accessor/Native/Counter/dec.pm',
-    'Moose/Meta/Method/Accessor/Native/Counter/inc.pm',
-    'Moose/Meta/Method/Accessor/Native/Counter/reset.pm',
-    'Moose/Meta/Method/Accessor/Native/Counter/set.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/Writer.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/accessor.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/clear.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/count.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/defined.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/delete.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/elements.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/exists.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/get.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/is_empty.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/keys.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/kv.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/set.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/shallow_clone.pm',
-    'Moose/Meta/Method/Accessor/Native/Hash/values.pm',
-    'Moose/Meta/Method/Accessor/Native/Number/abs.pm',
-    'Moose/Meta/Method/Accessor/Native/Number/add.pm',
-    'Moose/Meta/Method/Accessor/Native/Number/div.pm',
-    'Moose/Meta/Method/Accessor/Native/Number/mod.pm',
-    'Moose/Meta/Method/Accessor/Native/Number/mul.pm',
-    'Moose/Meta/Method/Accessor/Native/Number/set.pm',
-    'Moose/Meta/Method/Accessor/Native/Number/sub.pm',
-    'Moose/Meta/Method/Accessor/Native/Reader.pm',
-    'Moose/Meta/Method/Accessor/Native/String/append.pm',
-    'Moose/Meta/Method/Accessor/Native/String/chomp.pm',
-    'Moose/Meta/Method/Accessor/Native/String/chop.pm',
-    'Moose/Meta/Method/Accessor/Native/String/clear.pm',
-    'Moose/Meta/Method/Accessor/Native/String/inc.pm',
-    'Moose/Meta/Method/Accessor/Native/String/length.pm',
-    'Moose/Meta/Method/Accessor/Native/String/match.pm',
-    'Moose/Meta/Method/Accessor/Native/String/prepend.pm',
-    'Moose/Meta/Method/Accessor/Native/String/replace.pm',
-    'Moose/Meta/Method/Accessor/Native/String/substr.pm',
-    'Moose/Meta/Method/Accessor/Native/Writer.pm',
-    'Moose/Meta/Method/Augmented.pm',
-    'Moose/Meta/Method/Constructor.pm',
-    'Moose/Meta/Method/Delegation.pm',
-    'Moose/Meta/Method/Destructor.pm',
-    'Moose/Meta/Method/Meta.pm',
-    'Moose/Meta/Method/Overridden.pm',
-    'Moose/Meta/Object/Trait.pm',
-    'Moose/Meta/Role.pm',
-    'Moose/Meta/Role/Application.pm',
-    'Moose/Meta/Role/Application/RoleSummation.pm',
-    'Moose/Meta/Role/Application/ToClass.pm',
-    'Moose/Meta/Role/Application/ToInstance.pm',
-    'Moose/Meta/Role/Application/ToRole.pm',
-    'Moose/Meta/Role/Composite.pm',
-    'Moose/Meta/Role/Method.pm',
-    'Moose/Meta/Role/Method/Conflicting.pm',
-    'Moose/Meta/Role/Method/Required.pm',
-    'Moose/Meta/TypeCoercion.pm',
-    'Moose/Meta/TypeCoercion/Union.pm',
-    'Moose/Meta/TypeConstraint.pm',
-    'Moose/Meta/TypeConstraint/Registry.pm',
-    'Moose/Object.pm',
-    'Moose/Role.pm',
-    'Moose/Util.pm',
-    'Moose/Util/MetaRole.pm',
-    'Moose/Util/TypeConstraints.pm',
-    'Moose/Util/TypeConstraints/Builtins.pm',
-    'Test/Moose.pm',
-    'metaclass.pm',
-    'oose.pm'
-);
-
-my @scripts = (
-    'bin/moose-outdated'
-);
-
-# no fake home requested
-
-my $inc_switch = -d 'blib' ? '-Mblib' : '-Ilib';
-
-use File::Spec;
-use IPC::Open3;
-use IO::Handle;
-
-open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!";
-
-my @warnings;
-for my $lib (@module_files)
-{
-    # see L<perlfaq8/How can I capture STDERR from an external command?>
-    my $stderr = IO::Handle->new;
-
-    my $pid = open3($stdin, '>&STDERR', $stderr, $^X, $inc_switch, '-e', "require q[$lib]");
-    binmode $stderr, ':crlf' if $^O eq 'MSWin32';
-    my @_warnings = <$stderr>;
-    waitpid($pid, 0);
-    is($?, 0, "$lib loaded ok");
-
-    if (@_warnings)
-    {
-        warn @_warnings;
-        push @warnings, @_warnings;
-    }
-}
-
-foreach my $file (@scripts)
-{ SKIP: {
-    open my $fh, '<', $file or warn("Unable to open $file: $!"), next;
-    my $line = <$fh>;
-    close $fh and skip("$file isn't perl", 1) unless $line =~ /^#!.*?\bperl\b\s*(.*)$/;
-
-    my @flags = $1 ? split(/\s+/, $1) : ();
-
-    my $stderr = IO::Handle->new;
-
-    my $pid = open3($stdin, '>&STDERR', $stderr, $^X, $inc_switch, @flags, '-c', $file);
-    binmode $stderr, ':crlf' if $^O eq 'MSWin32';
-    my @_warnings = <$stderr>;
-    waitpid($pid, 0);
-    is($?, 0, "$file compiled ok");
-
-   # in older perls, -c output is simply the file portion of the path being tested
-    if (@_warnings = grep { !/\bsyntax OK$/ }
-        grep { chomp; $_ ne (File::Spec->splitpath($file))[2] } @_warnings)
-    {
-        warn @_warnings;
-        push @warnings, @_warnings;
-    }
-} }
-
-
-
-is(scalar(@warnings), 0, 'no warnings found') if $ENV{AUTHOR_TESTING};
-
-BAIL_OUT("Compilation problems") if !Test::More->builder->is_passing;
@@ -0,0 +1,15 @@
+use strict;
+use warnings;
+
+use Test::More;
+BEGIN {
+    plan skip_all => 'this test requires a built dist'
+        unless -f 'MANIFEST' && -f 'META.json';
+}
+
+use Moose ();
+
+# this is used in Moo::sification
+ok(defined $Moose::AUTHORITY, '$AUTHORITY is set in the main module');
+
+done_testing;
@@ -0,0 +1,8 @@
+use strict;
+use warnings;
+use Test::More;
+
+# generated by Dist::Zilla::Plugin::Test::EOL 0.15
+use Test::EOL;
+
+all_perl_files_ok({ trailing_whitespace => 1 });
@@ -2,9 +2,13 @@ use strict;
 use warnings;
 
 use Test::More;
-use Test::LeakTrace 0.01;
+use Test::LeakTrace;
 use Test::Memory::Cycle;
 
+BEGIN {
+    plan skip_all => 'Leak tests fail under Devel::Cover' if $INC{'Devel/Cover.pm'};
+}
+
 use Moose ();
 use Moose::Util qw( apply_all_roles );
 use Moose::Util::TypeConstraints;
@@ -15,12 +19,70 @@ use Moose::Util::TypeConstraints;
     sub myname { "I'm a role" }
 }
 
-no_leaks_ok(
-    sub {
-        Moose::Meta::Class->create_anon_class->new_object;
-    },
-    'anonymous class with no roles is leak-free'
-);
+{
+    package Fake::DateTime;
+    use Moose;
+
+    has 'string_repr' => ( is => 'ro' );
+
+    package Mortgage;
+    use Moose;
+    use Moose::Util::TypeConstraints;
+
+    coerce 'Fake::DateTime' => from 'Str' =>
+        via { Fake::DateTime->new( string_repr => $_ ) };
+
+    has 'closing_date' => (
+        is      => 'rw',
+        isa     => 'Fake::DateTime',
+        coerce  => 1,
+        trigger => sub {
+            my ( $self, $val ) = @_;
+            ::pass('... trigger is being called');
+            ::isa_ok( $self->closing_date, 'Fake::DateTime' );
+            ::isa_ok( $val,                'Fake::DateTime' );
+        }
+    );
+}
+
+{
+    package Man;
+    use Moose;
+
+    my @actions;
+
+    sub live {
+        push @actions, 'live';
+    }
+
+    sub create {
+        push @actions, 'create';
+    }
+
+    sub breathe {
+        push @actions, 'breathe';
+    }
+
+    package Earth;
+    use Moose;
+    use Moose::Util::TypeConstraints;
+
+    has man => (
+        isa     => 'Man',
+        handles => [qw( live create breathe )],
+    );
+}
+
+
+{
+    local $TODO = 'anonymous classes leak on 5.8' if $] < 5.010;
+    no_leaks_ok(
+        sub {
+            Moose::Meta::Class->create_anon_class->new_object;
+        },
+        'anonymous class with no roles is leak-free'
+    );
+}
 
 no_leaks_ok(
     sub {
@@ -108,5 +170,69 @@ no_leaks_ok(
     memory_cycle_ok($Str_or_Undef, 'union types do not leak');
 }
 
+{
+    my $mtg = Mortgage->new( closing_date => 'yesterday' );
+    $mtg->closing_date;
+    Mortgage->meta->make_immutable;
+
+    memory_cycle_ok($mtg->meta, 'meta (triggers/coerce) is cycle-free');
+}
+
+{
+    local $TODO = 'meta cycles exist at the moment';
+    memory_cycle_ok(Earth->new->meta, 'meta (handles) is cycle-free');
+    memory_cycle_ok(Earth->meta,      'meta (class) is cycle-free');
+}
+
+{
+    my $Point = Class::MOP::Class->create('Point' => (
+        version    => '0.01',
+        attributes => [
+            Class::MOP::Attribute->new('x' => (
+                reader   => 'x',
+                init_arg => 'x'
+            )),
+            Class::MOP::Attribute->new('y' => (
+                accessor => 'y',
+                init_arg => 'y'
+            )),
+        ],
+        methods => {
+            'new' => sub {
+                my $class = shift;
+                my $instance = $class->meta->new_object(@_);
+                bless $instance => $class;
+            },
+            'clear' => sub {
+                my $self = shift;
+                $self->{'x'} = 0;
+                $self->{'y'} = 0;
+            }
+        }
+    ));
+
+    my $Point3D = Class::MOP::Class->create('Point3D' => (
+        version      => '0.01',
+        superclasses => [ 'Point' ],
+        attributes => [
+            Class::MOP::Attribute->new('z' => (
+                default  => 123
+            )),
+        ],
+        methods => {
+            'clear' => sub {
+                my $self = shift;
+                $self->{'z'} = 0;
+                $self->SUPER::clear();
+            }
+        }
+    ));
+
+    local $TODO = 'CMOP cycles exist at the moment';
+    memory_cycle_ok($Point3D,       'Point3D is cycle-free');
+    memory_cycle_ok($Point,         'Point is cycle-free');
+    memory_cycle_ok($Point3D->meta, 'Point3D meta is cycle-free');
+    memory_cycle_ok($Point->meta,   'Point meta is cycle-free');
+}
 
 done_testing;
@@ -0,0 +1,967 @@
+use strict;
+use warnings;
+
+# this test was generated with Dist::Zilla::Plugin::Test::NoTabs 0.09
+
+use Test::More 0.88;
+use Test::NoTabs;
+
+my @files = (
+    'bin/moose-outdated',
+    'lib/Class/MOP.pm',
+    'lib/Class/MOP/Attribute.pm',
+    'lib/Class/MOP/Class.pm',
+    'lib/Class/MOP/Class/Immutable/Trait.pm',
+    'lib/Class/MOP/Deprecated.pm',
+    'lib/Class/MOP/Instance.pm',
+    'lib/Class/MOP/Method.pm',
+    'lib/Class/MOP/Method/Accessor.pm',
+    'lib/Class/MOP/Method/Constructor.pm',
+    'lib/Class/MOP/Method/Generated.pm',
+    'lib/Class/MOP/Method/Inlined.pm',
+    'lib/Class/MOP/Method/Meta.pm',
+    'lib/Class/MOP/Method/Wrapped.pm',
+    'lib/Class/MOP/MiniTrait.pm',
+    'lib/Class/MOP/Mixin.pm',
+    'lib/Class/MOP/Mixin/AttributeCore.pm',
+    'lib/Class/MOP/Mixin/HasAttributes.pm',
+    'lib/Class/MOP/Mixin/HasMethods.pm',
+    'lib/Class/MOP/Mixin/HasOverloads.pm',
+    'lib/Class/MOP/Module.pm',
+    'lib/Class/MOP/Object.pm',
+    'lib/Class/MOP/Overload.pm',
+    'lib/Class/MOP/Package.pm',
+    'lib/Moose.pm',
+    'lib/Moose/Conflicts.pm',
+    'lib/Moose/Cookbook.pod',
+    'lib/Moose/Cookbook/Basics/BankAccount_MethodModifiersAndSubclassing.pod',
+    'lib/Moose/Cookbook/Basics/BinaryTree_AttributeFeatures.pod',
+    'lib/Moose/Cookbook/Basics/BinaryTree_BuilderAndLazyBuild.pod',
+    'lib/Moose/Cookbook/Basics/Company_Subtypes.pod',
+    'lib/Moose/Cookbook/Basics/DateTime_ExtendingNonMooseParent.pod',
+    'lib/Moose/Cookbook/Basics/Document_AugmentAndInner.pod',
+    'lib/Moose/Cookbook/Basics/Genome_OverloadingSubtypesAndCoercion.pod',
+    'lib/Moose/Cookbook/Basics/HTTP_SubtypesAndCoercion.pod',
+    'lib/Moose/Cookbook/Basics/Immutable.pod',
+    'lib/Moose/Cookbook/Basics/Person_BUILDARGSAndBUILD.pod',
+    'lib/Moose/Cookbook/Basics/Point_AttributesAndSubclassing.pod',
+    'lib/Moose/Cookbook/Extending/Debugging_BaseClassRole.pod',
+    'lib/Moose/Cookbook/Extending/ExtensionOverview.pod',
+    'lib/Moose/Cookbook/Extending/Mooseish_MooseSugar.pod',
+    'lib/Moose/Cookbook/Legacy/Debugging_BaseClassReplacement.pod',
+    'lib/Moose/Cookbook/Legacy/Labeled_AttributeMetaclass.pod',
+    'lib/Moose/Cookbook/Legacy/Table_ClassMetaclass.pod',
+    'lib/Moose/Cookbook/Meta/GlobRef_InstanceMetaclass.pod',
+    'lib/Moose/Cookbook/Meta/Labeled_AttributeTrait.pod',
+    'lib/Moose/Cookbook/Meta/PrivateOrPublic_MethodMetaclass.pod',
+    'lib/Moose/Cookbook/Meta/Table_MetaclassTrait.pod',
+    'lib/Moose/Cookbook/Meta/WhyMeta.pod',
+    'lib/Moose/Cookbook/Roles/ApplicationToInstance.pod',
+    'lib/Moose/Cookbook/Roles/Comparable_CodeReuse.pod',
+    'lib/Moose/Cookbook/Roles/Restartable_AdvancedComposition.pod',
+    'lib/Moose/Cookbook/Snack/Keywords.pod',
+    'lib/Moose/Cookbook/Snack/Types.pod',
+    'lib/Moose/Cookbook/Style.pod',
+    'lib/Moose/Deprecated.pm',
+    'lib/Moose/Exception.pm',
+    'lib/Moose/Exception/AccessorMustReadWrite.pm',
+    'lib/Moose/Exception/AddParameterizableTypeTakesParameterizableType.pm',
+    'lib/Moose/Exception/AddRoleTakesAMooseMetaRoleInstance.pm',
+    'lib/Moose/Exception/AddRoleToARoleTakesAMooseMetaRole.pm',
+    'lib/Moose/Exception/ApplyTakesABlessedInstance.pm',
+    'lib/Moose/Exception/AttachToClassNeedsAClassMOPClassInstanceOrASubclass.pm',
+    'lib/Moose/Exception/AttributeConflictInRoles.pm',
+    'lib/Moose/Exception/AttributeConflictInSummation.pm',
+    'lib/Moose/Exception/AttributeExtensionIsNotSupportedInRoles.pm',
+    'lib/Moose/Exception/AttributeIsRequired.pm',
+    'lib/Moose/Exception/AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass.pm',
+    'lib/Moose/Exception/AttributeNamesDoNotMatch.pm',
+    'lib/Moose/Exception/AttributeValueIsNotAnObject.pm',
+    'lib/Moose/Exception/AttributeValueIsNotDefined.pm',
+    'lib/Moose/Exception/AutoDeRefNeedsArrayRefOrHashRef.pm',
+    'lib/Moose/Exception/BadOptionFormat.pm',
+    'lib/Moose/Exception/BothBuilderAndDefaultAreNotAllowed.pm',
+    'lib/Moose/Exception/BuilderDoesNotExist.pm',
+    'lib/Moose/Exception/BuilderMethodNotSupportedForAttribute.pm',
+    'lib/Moose/Exception/BuilderMethodNotSupportedForInlineAttribute.pm',
+    'lib/Moose/Exception/BuilderMustBeAMethodName.pm',
+    'lib/Moose/Exception/CallingMethodOnAnImmutableInstance.pm',
+    'lib/Moose/Exception/CallingReadOnlyMethodOnAnImmutableInstance.pm',
+    'lib/Moose/Exception/CanExtendOnlyClasses.pm',
+    'lib/Moose/Exception/CanOnlyConsumeRole.pm',
+    'lib/Moose/Exception/CanOnlyWrapBlessedCode.pm',
+    'lib/Moose/Exception/CanReblessOnlyIntoASubclass.pm',
+    'lib/Moose/Exception/CanReblessOnlyIntoASuperclass.pm',
+    'lib/Moose/Exception/CannotAddAdditionalTypeCoercionsToUnion.pm',
+    'lib/Moose/Exception/CannotAddAsAnAttributeToARole.pm',
+    'lib/Moose/Exception/CannotApplyBaseClassRolesToRole.pm',
+    'lib/Moose/Exception/CannotAssignValueToReadOnlyAccessor.pm',
+    'lib/Moose/Exception/CannotAugmentIfLocalMethodPresent.pm',
+    'lib/Moose/Exception/CannotAugmentNoSuperMethod.pm',
+    'lib/Moose/Exception/CannotAutoDerefWithoutIsa.pm',
+    'lib/Moose/Exception/CannotAutoDereferenceTypeConstraint.pm',
+    'lib/Moose/Exception/CannotCalculateNativeType.pm',
+    'lib/Moose/Exception/CannotCallAnAbstractBaseMethod.pm',
+    'lib/Moose/Exception/CannotCallAnAbstractMethod.pm',
+    'lib/Moose/Exception/CannotCoerceAWeakRef.pm',
+    'lib/Moose/Exception/CannotCoerceAttributeWhichHasNoCoercion.pm',
+    'lib/Moose/Exception/CannotCreateHigherOrderTypeWithoutATypeParameter.pm',
+    'lib/Moose/Exception/CannotCreateMethodAliasLocalMethodIsPresent.pm',
+    'lib/Moose/Exception/CannotCreateMethodAliasLocalMethodIsPresentInClass.pm',
+    'lib/Moose/Exception/CannotDelegateLocalMethodIsPresent.pm',
+    'lib/Moose/Exception/CannotDelegateWithoutIsa.pm',
+    'lib/Moose/Exception/CannotFindDelegateMetaclass.pm',
+    'lib/Moose/Exception/CannotFindType.pm',
+    'lib/Moose/Exception/CannotFindTypeGivenToMatchOnType.pm',
+    'lib/Moose/Exception/CannotFixMetaclassCompatibility.pm',
+    'lib/Moose/Exception/CannotGenerateInlineConstraint.pm',
+    'lib/Moose/Exception/CannotInitializeMooseMetaRoleComposite.pm',
+    'lib/Moose/Exception/CannotInlineTypeConstraintCheck.pm',
+    'lib/Moose/Exception/CannotLocatePackageInINC.pm',
+    'lib/Moose/Exception/CannotMakeMetaclassCompatible.pm',
+    'lib/Moose/Exception/CannotOverrideALocalMethod.pm',
+    'lib/Moose/Exception/CannotOverrideBodyOfMetaMethods.pm',
+    'lib/Moose/Exception/CannotOverrideLocalMethodIsPresent.pm',
+    'lib/Moose/Exception/CannotOverrideNoSuperMethod.pm',
+    'lib/Moose/Exception/CannotRegisterUnnamedTypeConstraint.pm',
+    'lib/Moose/Exception/CannotUseLazyBuildAndDefaultSimultaneously.pm',
+    'lib/Moose/Exception/CircularReferenceInAlso.pm',
+    'lib/Moose/Exception/ClassDoesNotHaveInitMeta.pm',
+    'lib/Moose/Exception/ClassDoesTheExcludedRole.pm',
+    'lib/Moose/Exception/ClassNamesDoNotMatch.pm',
+    'lib/Moose/Exception/CloneObjectExpectsAnInstanceOfMetaclass.pm',
+    'lib/Moose/Exception/CodeBlockMustBeACodeRef.pm',
+    'lib/Moose/Exception/CoercingWithoutCoercions.pm',
+    'lib/Moose/Exception/CoercionAlreadyExists.pm',
+    'lib/Moose/Exception/CoercionNeedsTypeConstraint.pm',
+    'lib/Moose/Exception/ConflictDetectedInCheckRoleExclusions.pm',
+    'lib/Moose/Exception/ConflictDetectedInCheckRoleExclusionsInToClass.pm',
+    'lib/Moose/Exception/ConstructClassInstanceTakesPackageName.pm',
+    'lib/Moose/Exception/CouldNotCreateMethod.pm',
+    'lib/Moose/Exception/CouldNotCreateWriter.pm',
+    'lib/Moose/Exception/CouldNotEvalConstructor.pm',
+    'lib/Moose/Exception/CouldNotEvalDestructor.pm',
+    'lib/Moose/Exception/CouldNotFindTypeConstraintToCoerceFrom.pm',
+    'lib/Moose/Exception/CouldNotGenerateInlineAttributeMethod.pm',
+    'lib/Moose/Exception/CouldNotLocateTypeConstraintForUnion.pm',
+    'lib/Moose/Exception/CouldNotParseType.pm',
+    'lib/Moose/Exception/CreateMOPClassTakesArrayRefOfAttributes.pm',
+    'lib/Moose/Exception/CreateMOPClassTakesArrayRefOfSuperclasses.pm',
+    'lib/Moose/Exception/CreateMOPClassTakesHashRefOfMethods.pm',
+    'lib/Moose/Exception/CreateTakesArrayRefOfRoles.pm',
+    'lib/Moose/Exception/CreateTakesHashRefOfAttributes.pm',
+    'lib/Moose/Exception/CreateTakesHashRefOfMethods.pm',
+    'lib/Moose/Exception/DefaultToMatchOnTypeMustBeCodeRef.pm',
+    'lib/Moose/Exception/DelegationToAClassWhichIsNotLoaded.pm',
+    'lib/Moose/Exception/DelegationToARoleWhichIsNotLoaded.pm',
+    'lib/Moose/Exception/DelegationToATypeWhichIsNotAClass.pm',
+    'lib/Moose/Exception/DoesRequiresRoleName.pm',
+    'lib/Moose/Exception/EnumCalledWithAnArrayRefAndAdditionalArgs.pm',
+    'lib/Moose/Exception/EnumValuesMustBeString.pm',
+    'lib/Moose/Exception/ExtendsMissingArgs.pm',
+    'lib/Moose/Exception/HandlesMustBeAHashRef.pm',
+    'lib/Moose/Exception/IllegalInheritedOptions.pm',
+    'lib/Moose/Exception/IllegalMethodTypeToAddMethodModifier.pm',
+    'lib/Moose/Exception/IncompatibleMetaclassOfSuperclass.pm',
+    'lib/Moose/Exception/InitMetaRequiresClass.pm',
+    'lib/Moose/Exception/InitializeTakesUnBlessedPackageName.pm',
+    'lib/Moose/Exception/InstanceBlessedIntoWrongClass.pm',
+    'lib/Moose/Exception/InstanceMustBeABlessedReference.pm',
+    'lib/Moose/Exception/InvalidArgPassedToMooseUtilMetaRole.pm',
+    'lib/Moose/Exception/InvalidArgumentToMethod.pm',
+    'lib/Moose/Exception/InvalidArgumentsToTraitAliases.pm',
+    'lib/Moose/Exception/InvalidBaseTypeGivenToCreateParameterizedTypeConstraint.pm',
+    'lib/Moose/Exception/InvalidHandleValue.pm',
+    'lib/Moose/Exception/InvalidHasProvidedInARole.pm',
+    'lib/Moose/Exception/InvalidNameForType.pm',
+    'lib/Moose/Exception/InvalidOverloadOperator.pm',
+    'lib/Moose/Exception/InvalidRoleApplication.pm',
+    'lib/Moose/Exception/InvalidTypeConstraint.pm',
+    'lib/Moose/Exception/InvalidTypeGivenToCreateParameterizedTypeConstraint.pm',
+    'lib/Moose/Exception/InvalidValueForIs.pm',
+    'lib/Moose/Exception/IsaDoesNotDoTheRole.pm',
+    'lib/Moose/Exception/IsaLacksDoesMethod.pm',
+    'lib/Moose/Exception/LazyAttributeNeedsADefault.pm',
+    'lib/Moose/Exception/Legacy.pm',
+    'lib/Moose/Exception/MOPAttributeNewNeedsAttributeName.pm',
+    'lib/Moose/Exception/MatchActionMustBeACodeRef.pm',
+    'lib/Moose/Exception/MessageParameterMustBeCodeRef.pm',
+    'lib/Moose/Exception/MetaclassIsAClassNotASubclassOfGivenMetaclass.pm',
+    'lib/Moose/Exception/MetaclassIsARoleNotASubclassOfGivenMetaclass.pm',
+    'lib/Moose/Exception/MetaclassIsNotASubclassOfGivenMetaclass.pm',
+    'lib/Moose/Exception/MetaclassMustBeASubclassOfMooseMetaClass.pm',
+    'lib/Moose/Exception/MetaclassMustBeASubclassOfMooseMetaRole.pm',
+    'lib/Moose/Exception/MetaclassMustBeDerivedFromClassMOPClass.pm',
+    'lib/Moose/Exception/MetaclassNotLoaded.pm',
+    'lib/Moose/Exception/MetaclassTypeIncompatible.pm',
+    'lib/Moose/Exception/MethodExpectedAMetaclassObject.pm',
+    'lib/Moose/Exception/MethodExpectsFewerArgs.pm',
+    'lib/Moose/Exception/MethodExpectsMoreArgs.pm',
+    'lib/Moose/Exception/MethodModifierNeedsMethodName.pm',
+    'lib/Moose/Exception/MethodNameConflictInRoles.pm',
+    'lib/Moose/Exception/MethodNameNotFoundInInheritanceHierarchy.pm',
+    'lib/Moose/Exception/MethodNameNotGiven.pm',
+    'lib/Moose/Exception/MustDefineAMethodName.pm',
+    'lib/Moose/Exception/MustDefineAnAttributeName.pm',
+    'lib/Moose/Exception/MustDefineAnOverloadOperator.pm',
+    'lib/Moose/Exception/MustHaveAtLeastOneValueToEnumerate.pm',
+    'lib/Moose/Exception/MustPassAHashOfOptions.pm',
+    'lib/Moose/Exception/MustPassAMooseMetaRoleInstanceOrSubclass.pm',
+    'lib/Moose/Exception/MustPassAPackageNameOrAnExistingClassMOPPackageInstance.pm',
+    'lib/Moose/Exception/MustPassEvenNumberOfArguments.pm',
+    'lib/Moose/Exception/MustPassEvenNumberOfAttributeOptions.pm',
+    'lib/Moose/Exception/MustProvideANameForTheAttribute.pm',
+    'lib/Moose/Exception/MustSpecifyAtleastOneMethod.pm',
+    'lib/Moose/Exception/MustSpecifyAtleastOneRole.pm',
+    'lib/Moose/Exception/MustSpecifyAtleastOneRoleToApplicant.pm',
+    'lib/Moose/Exception/MustSupplyAClassMOPAttributeInstance.pm',
+    'lib/Moose/Exception/MustSupplyADelegateToMethod.pm',
+    'lib/Moose/Exception/MustSupplyAMetaclass.pm',
+    'lib/Moose/Exception/MustSupplyAMooseMetaAttributeInstance.pm',
+    'lib/Moose/Exception/MustSupplyAnAccessorTypeToConstructWith.pm',
+    'lib/Moose/Exception/MustSupplyAnAttributeToConstructWith.pm',
+    'lib/Moose/Exception/MustSupplyArrayRefAsCurriedArguments.pm',
+    'lib/Moose/Exception/MustSupplyPackageNameAndName.pm',
+    'lib/Moose/Exception/NeedsTypeConstraintUnionForTypeCoercionUnion.pm',
+    'lib/Moose/Exception/NeitherAttributeNorAttributeNameIsGiven.pm',
+    'lib/Moose/Exception/NeitherClassNorClassNameIsGiven.pm',
+    'lib/Moose/Exception/NeitherRoleNorRoleNameIsGiven.pm',
+    'lib/Moose/Exception/NeitherTypeNorTypeNameIsGiven.pm',
+    'lib/Moose/Exception/NoAttributeFoundInSuperClass.pm',
+    'lib/Moose/Exception/NoBodyToInitializeInAnAbstractBaseClass.pm',
+    'lib/Moose/Exception/NoCasesMatched.pm',
+    'lib/Moose/Exception/NoConstraintCheckForTypeConstraint.pm',
+    'lib/Moose/Exception/NoDestructorClassSpecified.pm',
+    'lib/Moose/Exception/NoImmutableTraitSpecifiedForClass.pm',
+    'lib/Moose/Exception/NoParentGivenToSubtype.pm',
+    'lib/Moose/Exception/OnlyInstancesCanBeCloned.pm',
+    'lib/Moose/Exception/OperatorIsRequired.pm',
+    'lib/Moose/Exception/OverloadConflictInSummation.pm',
+    'lib/Moose/Exception/OverloadRequiresAMetaClass.pm',
+    'lib/Moose/Exception/OverloadRequiresAMetaMethod.pm',
+    'lib/Moose/Exception/OverloadRequiresAMetaOverload.pm',
+    'lib/Moose/Exception/OverloadRequiresAMethodNameOrCoderef.pm',
+    'lib/Moose/Exception/OverloadRequiresAnOperator.pm',
+    'lib/Moose/Exception/OverloadRequiresNamesForCoderef.pm',
+    'lib/Moose/Exception/OverrideConflictInComposition.pm',
+    'lib/Moose/Exception/OverrideConflictInSummation.pm',
+    'lib/Moose/Exception/PackageDoesNotUseMooseExporter.pm',
+    'lib/Moose/Exception/PackageNameAndNameParamsNotGivenToWrap.pm',
+    'lib/Moose/Exception/PackagesAndModulesAreNotCachable.pm',
+    'lib/Moose/Exception/ParameterIsNotSubtypeOfParent.pm',
+    'lib/Moose/Exception/ReferencesAreNotAllowedAsDefault.pm',
+    'lib/Moose/Exception/RequiredAttributeLacksInitialization.pm',
+    'lib/Moose/Exception/RequiredAttributeNeedsADefault.pm',
+    'lib/Moose/Exception/RequiredMethodsImportedByClass.pm',
+    'lib/Moose/Exception/RequiredMethodsNotImplementedByClass.pm',
+    'lib/Moose/Exception/Role/Attribute.pm',
+    'lib/Moose/Exception/Role/AttributeName.pm',
+    'lib/Moose/Exception/Role/Class.pm',
+    'lib/Moose/Exception/Role/EitherAttributeOrAttributeName.pm',
+    'lib/Moose/Exception/Role/Instance.pm',
+    'lib/Moose/Exception/Role/InstanceClass.pm',
+    'lib/Moose/Exception/Role/InvalidAttributeOptions.pm',
+    'lib/Moose/Exception/Role/Method.pm',
+    'lib/Moose/Exception/Role/ParamsHash.pm',
+    'lib/Moose/Exception/Role/Role.pm',
+    'lib/Moose/Exception/Role/RoleForCreate.pm',
+    'lib/Moose/Exception/Role/RoleForCreateMOPClass.pm',
+    'lib/Moose/Exception/Role/TypeConstraint.pm',
+    'lib/Moose/Exception/RoleDoesTheExcludedRole.pm',
+    'lib/Moose/Exception/RoleExclusionConflict.pm',
+    'lib/Moose/Exception/RoleNameRequired.pm',
+    'lib/Moose/Exception/RoleNameRequiredForMooseMetaRole.pm',
+    'lib/Moose/Exception/RolesDoNotSupportAugment.pm',
+    'lib/Moose/Exception/RolesDoNotSupportExtends.pm',
+    'lib/Moose/Exception/RolesDoNotSupportInner.pm',
+    'lib/Moose/Exception/RolesDoNotSupportRegexReferencesForMethodModifiers.pm',
+    'lib/Moose/Exception/RolesInCreateTakesAnArrayRef.pm',
+    'lib/Moose/Exception/RolesListMustBeInstancesOfMooseMetaRole.pm',
+    'lib/Moose/Exception/SingleParamsToNewMustBeHashRef.pm',
+    'lib/Moose/Exception/TriggerMustBeACodeRef.pm',
+    'lib/Moose/Exception/TypeConstraintCannotBeUsedForAParameterizableType.pm',
+    'lib/Moose/Exception/TypeConstraintIsAlreadyCreated.pm',
+    'lib/Moose/Exception/TypeParameterMustBeMooseMetaType.pm',
+    'lib/Moose/Exception/UnableToCanonicalizeHandles.pm',
+    'lib/Moose/Exception/UnableToCanonicalizeNonRolePackage.pm',
+    'lib/Moose/Exception/UnableToRecognizeDelegateMetaclass.pm',
+    'lib/Moose/Exception/UndefinedHashKeysPassedToMethod.pm',
+    'lib/Moose/Exception/UnionCalledWithAnArrayRefAndAdditionalArgs.pm',
+    'lib/Moose/Exception/UnionTakesAtleastTwoTypeNames.pm',
+    'lib/Moose/Exception/ValidationFailedForInlineTypeConstraint.pm',
+    'lib/Moose/Exception/ValidationFailedForTypeConstraint.pm',
+    'lib/Moose/Exception/WrapTakesACodeRefToBless.pm',
+    'lib/Moose/Exception/WrongTypeConstraintGiven.pm',
+    'lib/Moose/Exporter.pm',
+    'lib/Moose/Intro.pod',
+    'lib/Moose/Manual.pod',
+    'lib/Moose/Manual/Attributes.pod',
+    'lib/Moose/Manual/BestPractices.pod',
+    'lib/Moose/Manual/Classes.pod',
+    'lib/Moose/Manual/Concepts.pod',
+    'lib/Moose/Manual/Construction.pod',
+    'lib/Moose/Manual/Contributing.pod',
+    'lib/Moose/Manual/Delegation.pod',
+    'lib/Moose/Manual/Delta.pod',
+    'lib/Moose/Manual/Exceptions.pod',
+    'lib/Moose/Manual/Exceptions/Manifest.pod',
+    'lib/Moose/Manual/FAQ.pod',
+    'lib/Moose/Manual/MOP.pod',
+    'lib/Moose/Manual/MethodModifiers.pod',
+    'lib/Moose/Manual/MooseX.pod',
+    'lib/Moose/Manual/Roles.pod',
+    'lib/Moose/Manual/Support.pod',
+    'lib/Moose/Manual/Types.pod',
+    'lib/Moose/Manual/Unsweetened.pod',
+    'lib/Moose/Meta/Attribute.pm',
+    'lib/Moose/Meta/Attribute/Native.pm',
+    'lib/Moose/Meta/Attribute/Native/Trait.pm',
+    'lib/Moose/Meta/Attribute/Native/Trait/Array.pm',
+    'lib/Moose/Meta/Attribute/Native/Trait/Bool.pm',
+    'lib/Moose/Meta/Attribute/Native/Trait/Code.pm',
+    'lib/Moose/Meta/Attribute/Native/Trait/Counter.pm',
+    'lib/Moose/Meta/Attribute/Native/Trait/Hash.pm',
+    'lib/Moose/Meta/Attribute/Native/Trait/Number.pm',
+    'lib/Moose/Meta/Attribute/Native/Trait/String.pm',
+    'lib/Moose/Meta/Class.pm',
+    'lib/Moose/Meta/Class/Immutable/Trait.pm',
+    'lib/Moose/Meta/Instance.pm',
+    'lib/Moose/Meta/Method.pm',
+    'lib/Moose/Meta/Method/Accessor.pm',
+    'lib/Moose/Meta/Method/Accessor/Native.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/Writer.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/accessor.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/clear.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/count.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/delete.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/elements.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/first.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/first_index.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/get.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/grep.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/insert.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/is_empty.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/join.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/map.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/natatime.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/pop.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/push.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/reduce.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/set.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/shallow_clone.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/shift.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/shuffle.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/sort.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/sort_in_place.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/splice.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/uniq.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Array/unshift.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Bool/not.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Bool/set.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Bool/toggle.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Bool/unset.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Code/execute.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Code/execute_method.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Collection.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Counter/Writer.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Counter/dec.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Counter/inc.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Counter/reset.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Counter/set.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/Writer.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/accessor.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/clear.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/count.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/defined.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/delete.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/elements.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/exists.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/get.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/is_empty.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/keys.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/kv.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/set.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/shallow_clone.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Hash/values.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Number/abs.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Number/add.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Number/div.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Number/mod.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Number/mul.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Number/set.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Number/sub.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Reader.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/String/append.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/String/chomp.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/String/chop.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/String/clear.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/String/inc.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/String/length.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/String/match.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/String/prepend.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/String/replace.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/String/substr.pm',
+    'lib/Moose/Meta/Method/Accessor/Native/Writer.pm',
+    'lib/Moose/Meta/Method/Augmented.pm',
+    'lib/Moose/Meta/Method/Constructor.pm',
+    'lib/Moose/Meta/Method/Delegation.pm',
+    'lib/Moose/Meta/Method/Destructor.pm',
+    'lib/Moose/Meta/Method/Meta.pm',
+    'lib/Moose/Meta/Method/Overridden.pm',
+    'lib/Moose/Meta/Mixin/AttributeCore.pm',
+    'lib/Moose/Meta/Object/Trait.pm',
+    'lib/Moose/Meta/Role.pm',
+    'lib/Moose/Meta/Role/Application.pm',
+    'lib/Moose/Meta/Role/Application/RoleSummation.pm',
+    'lib/Moose/Meta/Role/Application/ToClass.pm',
+    'lib/Moose/Meta/Role/Application/ToInstance.pm',
+    'lib/Moose/Meta/Role/Application/ToRole.pm',
+    'lib/Moose/Meta/Role/Attribute.pm',
+    'lib/Moose/Meta/Role/Composite.pm',
+    'lib/Moose/Meta/Role/Method.pm',
+    'lib/Moose/Meta/Role/Method/Conflicting.pm',
+    'lib/Moose/Meta/Role/Method/Required.pm',
+    'lib/Moose/Meta/TypeCoercion.pm',
+    'lib/Moose/Meta/TypeCoercion/Union.pm',
+    'lib/Moose/Meta/TypeConstraint.pm',
+    'lib/Moose/Meta/TypeConstraint/Class.pm',
+    'lib/Moose/Meta/TypeConstraint/DuckType.pm',
+    'lib/Moose/Meta/TypeConstraint/Enum.pm',
+    'lib/Moose/Meta/TypeConstraint/Parameterizable.pm',
+    'lib/Moose/Meta/TypeConstraint/Parameterized.pm',
+    'lib/Moose/Meta/TypeConstraint/Registry.pm',
+    'lib/Moose/Meta/TypeConstraint/Role.pm',
+    'lib/Moose/Meta/TypeConstraint/Union.pm',
+    'lib/Moose/Object.pm',
+    'lib/Moose/Role.pm',
+    'lib/Moose/Spec/Role.pod',
+    'lib/Moose/Unsweetened.pod',
+    'lib/Moose/Util.pm',
+    'lib/Moose/Util/MetaRole.pm',
+    'lib/Moose/Util/TypeConstraints.pm',
+    'lib/Moose/Util/TypeConstraints/Builtins.pm',
+    'lib/Test/Moose.pm',
+    'lib/metaclass.pm',
+    'lib/oose.pm',
+    't/00-report-prereqs.dd',
+    't/00-report-prereqs.t',
+    't/000_load.t',
+    't/attributes/accessor_context.t',
+    't/attributes/accessor_inlining.t',
+    't/attributes/accessor_override_method.t',
+    't/attributes/accessor_overwrite_warning.t',
+    't/attributes/attr_dereference_test.t',
+    't/attributes/attribute_accessor_generation.t',
+    't/attributes/attribute_custom_metaclass.t',
+    't/attributes/attribute_delegation.t',
+    't/attributes/attribute_does.t',
+    't/attributes/attribute_inherited_slot_specs.t',
+    't/attributes/attribute_lazy_initializer.t',
+    't/attributes/attribute_names.t',
+    't/attributes/attribute_reader_generation.t',
+    't/attributes/attribute_required.t',
+    't/attributes/attribute_traits.t',
+    't/attributes/attribute_traits_n_meta.t',
+    't/attributes/attribute_traits_parameterized.t',
+    't/attributes/attribute_traits_registered.t',
+    't/attributes/attribute_triggers.t',
+    't/attributes/attribute_type_unions.t',
+    't/attributes/attribute_without_any_methods.t',
+    't/attributes/attribute_writer_generation.t',
+    't/attributes/bad_coerce.t',
+    't/attributes/chained_coercion.t',
+    't/attributes/clone_weak.t',
+    't/attributes/default_class_role_types.t',
+    't/attributes/default_undef.t',
+    't/attributes/delegation_and_modifiers.t',
+    't/attributes/delegation_arg_aliasing.t',
+    't/attributes/delegation_target_not_loaded.t',
+    't/attributes/illegal_options_for_inheritance.t',
+    't/attributes/inherit_lazy_build.t',
+    't/attributes/lazy_no_default.t',
+    't/attributes/method_generation_rules.t',
+    't/attributes/misc_attribute_coerce_lazy.t',
+    't/attributes/misc_attribute_tests.t',
+    't/attributes/more_attr_delegation.t',
+    't/attributes/no_init_arg.t',
+    't/attributes/no_slot_access.t',
+    't/attributes/non_alpha_attr_names.t',
+    't/attributes/numeric_defaults.t',
+    't/attributes/trigger_and_coerce.t',
+    't/basics/always_strict_warnings.t',
+    't/basics/basic_class_setup.t',
+    't/basics/buildargs.t',
+    't/basics/buildargs_warning.t',
+    't/basics/create.t',
+    't/basics/create_anon.t',
+    't/basics/deprecations.t',
+    't/basics/destruction.t',
+    't/basics/error_handling.t',
+    't/basics/global-destruction-helper.pl',
+    't/basics/global_destruction.t',
+    't/basics/import_unimport.t',
+    't/basics/inner_and_augment.t',
+    't/basics/load_into_main.t',
+    't/basics/method_modifier_with_regexp.t',
+    't/basics/methods.t',
+    't/basics/moose_object_does.t',
+    't/basics/moose_respects_type_constraints.t',
+    't/basics/override_and_foreign_classes.t',
+    't/basics/override_augment_inner_super.t',
+    't/basics/rebless.t',
+    't/basics/require_superclasses.t',
+    't/basics/super_and_override.t',
+    't/basics/super_warns_on_args.t',
+    't/basics/universal_methods_wrappable.t',
+    't/basics/wrapped_method_cxt_propagation.t',
+    't/bugs/DEMOLISHALL.t',
+    't/bugs/DEMOLISHALL_shortcutted.t',
+    't/bugs/DEMOLISH_eats_exceptions.t',
+    't/bugs/DEMOLISH_eats_mini.t',
+    't/bugs/DEMOLISH_fails_without_metaclass.t',
+    't/bugs/Moose_Object_error.t',
+    't/bugs/anon_method_metaclass.t',
+    't/bugs/application_metarole_compat.t',
+    't/bugs/apply_role_to_one_instance_only.t',
+    't/bugs/attribute_trait_parameters.t',
+    't/bugs/augment_recursion_bug.t',
+    't/bugs/coerce_without_coercion.t',
+    't/bugs/constructor_object_overload.t',
+    't/bugs/create_anon_recursion.t',
+    't/bugs/create_anon_role_pass.t',
+    't/bugs/delete_sub_stash.t',
+    't/bugs/handles_foreign_class_bug.t',
+    't/bugs/immutable_metaclass_does_role.t',
+    't/bugs/immutable_n_default_x2.t',
+    't/bugs/inheriting_from_roles.t',
+    't/bugs/inline_reader_bug.t',
+    't/bugs/instance_application_role_args.t',
+    't/bugs/lazybuild_required_undef.t',
+    't/bugs/mark_as_methods_overloading_breakage.t',
+    't/bugs/moose_exporter_false_circular_reference_rt_63818.t',
+    't/bugs/moose_octal_defaults.t',
+    't/bugs/native_trait_handles_bad_value.t',
+    't/bugs/overloading_edge_cases.t',
+    't/bugs/reader_precedence_bug.t',
+    't/bugs/role_caller.t',
+    't/bugs/subclass_use_base_bug.t',
+    't/bugs/subtype_conflict_bug.t',
+    't/bugs/subtype_quote_bug.t',
+    't/bugs/super_recursion.t',
+    't/bugs/traits_with_exporter.t',
+    't/bugs/type_constraint_messages.t',
+    't/cmop/ArrayBasedStorage_test.t',
+    't/cmop/AttributesWithHistory_test.t',
+    't/cmop/BinaryTree_test.t',
+    't/cmop/C3MethodDispatchOrder_test.t',
+    't/cmop/ClassEncapsulatedAttributes_test.t',
+    't/cmop/Class_C3_compatibility.t',
+    't/cmop/InsideOutClass_test.t',
+    't/cmop/InstanceCountingClass_test.t',
+    't/cmop/LazyClass_test.t',
+    't/cmop/Perl6Attribute_test.t',
+    't/cmop/RT_27329_fix.t',
+    't/cmop/RT_39001_fix.t',
+    't/cmop/RT_41255.t',
+    't/cmop/add_attribute_alternate.t',
+    't/cmop/add_method_debugmode.t',
+    't/cmop/add_method_modifier.t',
+    't/cmop/advanced_methods.t',
+    't/cmop/anon_class.t',
+    't/cmop/anon_class_create_init.t',
+    't/cmop/anon_class_keep_alive.t',
+    't/cmop/anon_class_leak.t',
+    't/cmop/anon_class_removal.t',
+    't/cmop/anon_packages.t',
+    't/cmop/attribute.t',
+    't/cmop/attribute_duplication.t',
+    't/cmop/attribute_errors_and_edge_cases.t',
+    't/cmop/attribute_get_read_write.t',
+    't/cmop/attribute_initializer.t',
+    't/cmop/attribute_introspection.t',
+    't/cmop/attribute_non_alpha_name.t',
+    't/cmop/attributes.t',
+    't/cmop/basic.t',
+    't/cmop/before_after_dollar_under.t',
+    't/cmop/class_errors_and_edge_cases.t',
+    't/cmop/class_is_pristine.t',
+    't/cmop/class_precedence_list.t',
+    't/cmop/constant_codeinfo.t',
+    't/cmop/create_class.t',
+    't/cmop/custom_instance.t',
+    't/cmop/deprecated.t',
+    't/cmop/get_code_info.t',
+    't/cmop/immutable_custom_trait.t',
+    't/cmop/immutable_metaclass.t',
+    't/cmop/immutable_w_constructors.t',
+    't/cmop/immutable_w_custom_metaclass.t',
+    't/cmop/inline_and_dollar_at.t',
+    't/cmop/inline_structor.t',
+    't/cmop/insertion_order.t',
+    't/cmop/instance.t',
+    't/cmop/instance_inline.t',
+    't/cmop/instance_metaclass_incompat.t',
+    't/cmop/instance_metaclass_incompat_dyn.t',
+    't/cmop/lib/ArrayBasedStorage.pm',
+    't/cmop/lib/AttributesWithHistory.pm',
+    't/cmop/lib/BinaryTree.pm',
+    't/cmop/lib/C3MethodDispatchOrder.pm',
+    't/cmop/lib/ClassEncapsulatedAttributes.pm',
+    't/cmop/lib/InsideOutClass.pm',
+    't/cmop/lib/InstanceCountingClass.pm',
+    't/cmop/lib/LazyClass.pm',
+    't/cmop/lib/MyMetaClass.pm',
+    't/cmop/lib/MyMetaClass/Attribute.pm',
+    't/cmop/lib/MyMetaClass/Instance.pm',
+    't/cmop/lib/MyMetaClass/Method.pm',
+    't/cmop/lib/MyMetaClass/Random.pm',
+    't/cmop/lib/Perl6Attribute.pm',
+    't/cmop/lib/SyntaxError.pm',
+    't/cmop/load.t',
+    't/cmop/magic.t',
+    't/cmop/make_mutable.t',
+    't/cmop/meta_method.t',
+    't/cmop/meta_package.t',
+    't/cmop/meta_package_extension.t',
+    't/cmop/metaclass.t',
+    't/cmop/metaclass_incompatibility.t',
+    't/cmop/metaclass_incompatibility_dyn.t',
+    't/cmop/metaclass_inheritance.t',
+    't/cmop/metaclass_loads_classes.t',
+    't/cmop/metaclass_reinitialize.t',
+    't/cmop/method.t',
+    't/cmop/method_modifiers.t',
+    't/cmop/methods.t',
+    't/cmop/modify_parent_method.t',
+    't/cmop/new_and_clone_metaclasses.t',
+    't/cmop/null_stash.t',
+    't/cmop/numeric_defaults.t',
+    't/cmop/package_variables.t',
+    't/cmop/random_eval_bug.t',
+    't/cmop/rebless_instance.t',
+    't/cmop/rebless_instance_away.t',
+    't/cmop/rebless_overload.t',
+    't/cmop/rebless_with_extra_params.t',
+    't/cmop/scala_style_mixin_composition.t',
+    't/cmop/self_introspection.t',
+    't/cmop/subclasses.t',
+    't/cmop/subname.t',
+    't/cmop/universal_methods.t',
+    't/compat/composite_metaroles.t',
+    't/compat/extends_nonmoose_that_isa_moose_with_metarole.t',
+    't/compat/foreign_inheritence.t',
+    't/compat/inc_hash.t',
+    't/compat/module_refresh_compat.t',
+    't/compat/moose_respects_base.t',
+    't/examples/Child_Parent_attr_inherit.t',
+    't/examples/example1.t',
+    't/examples/example2.t',
+    't/examples/example_Moose_POOP.t',
+    't/examples/example_Protomoose.t',
+    't/examples/example_w_DCS.t',
+    't/examples/example_w_TestDeep.t',
+    't/examples/record_set_iterator.t',
+    't/exceptions/attribute.t',
+    't/exceptions/class-mop-attribute.t',
+    't/exceptions/class-mop-class-immutable-trait.t',
+    't/exceptions/class-mop-class.t',
+    't/exceptions/class-mop-method-accessor.t',
+    't/exceptions/class-mop-method-constructor.t',
+    't/exceptions/class-mop-method-generated.t',
+    't/exceptions/class-mop-method-meta.t',
+    't/exceptions/class-mop-method-wrapped.t',
+    't/exceptions/class-mop-method.t',
+    't/exceptions/class-mop-mixin-hasattributes.t',
+    't/exceptions/class-mop-mixin-hasmethods.t',
+    't/exceptions/class-mop-module.t',
+    't/exceptions/class-mop-object.t',
+    't/exceptions/class-mop-package.t',
+    't/exceptions/class.t',
+    't/exceptions/cmop.t',
+    't/exceptions/exception-lazyattributeneedsadefault.t',
+    't/exceptions/frame-leak.t',
+    't/exceptions/meta-role.t',
+    't/exceptions/metaclass.t',
+    't/exceptions/moose-exporter.t',
+    't/exceptions/moose-meta-attribute-native-traits.t',
+    't/exceptions/moose-meta-class-immutable-trait.t',
+    't/exceptions/moose-meta-method-accessor-native-array.t',
+    't/exceptions/moose-meta-method-accessor-native-collection.t',
+    't/exceptions/moose-meta-method-accessor-native-grep.t',
+    't/exceptions/moose-meta-method-accessor-native-hash-set.t',
+    't/exceptions/moose-meta-method-accessor-native-hash.t',
+    't/exceptions/moose-meta-method-accessor-native-string-match.t',
+    't/exceptions/moose-meta-method-accessor-native-string-replace.t',
+    't/exceptions/moose-meta-method-accessor-native-string-substr.t',
+    't/exceptions/moose-meta-method-accessor-native.t',
+    't/exceptions/moose-meta-method-accessor.t',
+    't/exceptions/moose-meta-method-augmented.t',
+    't/exceptions/moose-meta-method-constructor.t',
+    't/exceptions/moose-meta-method-delegation.t',
+    't/exceptions/moose-meta-method-destructor.t',
+    't/exceptions/moose-meta-method-overridden.t',
+    't/exceptions/moose-meta-role-application-rolesummation.t',
+    't/exceptions/moose-meta-role-application-toclass.t',
+    't/exceptions/moose-meta-role-application-torole.t',
+    't/exceptions/moose-meta-role-application.t',
+    't/exceptions/moose-meta-role-attribute.t',
+    't/exceptions/moose-meta-role-composite.t',
+    't/exceptions/moose-meta-typecoercion-union.t',
+    't/exceptions/moose-meta-typecoercion.t',
+    't/exceptions/moose-meta-typeconstraint-enum.t',
+    't/exceptions/moose-meta-typeconstraint-parameterizable.t',
+    't/exceptions/moose-meta-typeconstraint-parameterized.t',
+    't/exceptions/moose-meta-typeconstraint-registry.t',
+    't/exceptions/moose-meta-typeconstraint.t',
+    't/exceptions/moose-role.t',
+    't/exceptions/moose-util-metarole.t',
+    't/exceptions/moose-util-typeconstraints.t',
+    't/exceptions/moose.t',
+    't/exceptions/object.t',
+    't/exceptions/overload.t',
+    't/exceptions/rt-92818.t',
+    't/exceptions/rt-94795.t',
+    't/exceptions/stringify.t',
+    't/exceptions/traits.t',
+    't/exceptions/typeconstraints.t',
+    't/exceptions/util.t',
+    't/immutable/apply_roles_to_immutable.t',
+    't/immutable/buildargs.t',
+    't/immutable/constructor_is_not_moose.t',
+    't/immutable/constructor_is_wrapped.t',
+    't/immutable/default_values.t',
+    't/immutable/definition_context.t',
+    't/immutable/immutable_constructor_error.t',
+    't/immutable/immutable_destroy.t',
+    't/immutable/immutable_meta_class.t',
+    't/immutable/immutable_metaclass_with_traits.t',
+    't/immutable/immutable_moose.t',
+    't/immutable/immutable_roundtrip.t',
+    't/immutable/immutable_trigger_from_constructor.t',
+    't/immutable/inline_close_over.t',
+    't/immutable/inline_fallbacks.t',
+    't/immutable/inlined_constructors_n_types.t',
+    't/immutable/multiple_demolish_inline.t',
+    't/lib/Bar.pm',
+    't/lib/Bar7/Meta/Trait.pm',
+    't/lib/Bar7/Meta/Trait2.pm',
+    't/lib/Foo.pm',
+    't/lib/Moose/Meta/Attribute/Custom/Bar.pm',
+    't/lib/Moose/Meta/Attribute/Custom/Foo.pm',
+    't/lib/Moose/Meta/Attribute/Custom/Trait/Bar.pm',
+    't/lib/Moose/Meta/Attribute/Custom/Trait/Foo.pm',
+    't/lib/MyExporter.pm',
+    't/lib/MyMetaclassRole.pm',
+    't/lib/MyMooseA.pm',
+    't/lib/MyMooseB.pm',
+    't/lib/MyMooseObject.pm',
+    't/lib/NoInlineAttribute.pm',
+    't/lib/Overloading/ClassConsumesRoleConsumesOverloads.pm',
+    't/lib/Overloading/ClassWithCombiningRole.pm',
+    't/lib/Overloading/ClassWithOneRole.pm',
+    't/lib/Overloading/CombiningClass.pm',
+    't/lib/Overloading/CombiningRole.pm',
+    't/lib/Overloading/RoleConsumesOverloads.pm',
+    't/lib/Overloading/RoleWithOverloads.pm',
+    't/lib/Overloading/RoleWithoutOverloads.pm',
+    't/lib/OverloadingTests.pm',
+    't/lib/Real/Package.pm',
+    't/lib/Role/BreakOnLoad.pm',
+    't/lib/Role/Child.pm',
+    't/lib/Role/Interface.pm',
+    't/lib/Role/Parent.pm',
+    't/metaclasses/create_anon_with_required_attr.t',
+    't/metaclasses/custom_attr_meta_as_role.t',
+    't/metaclasses/custom_attr_meta_with_roles.t',
+    't/metaclasses/easy_init_meta.t',
+    't/metaclasses/export_with_prototype.t',
+    't/metaclasses/exporter_also_with_trait.t',
+    't/metaclasses/exporter_meta_lookup.t',
+    't/metaclasses/exporter_sub_names.t',
+    't/metaclasses/goto_moose_import.t',
+    't/metaclasses/immutable_metaclass_compat_bug.t',
+    't/metaclasses/meta_name.t',
+    't/metaclasses/metaclass_compat.t',
+    't/metaclasses/metaclass_compat_no_fixing_bug.t',
+    't/metaclasses/metaclass_compat_role_conflicts.t',
+    't/metaclasses/metaclass_parameterized_traits.t',
+    't/metaclasses/metaclass_traits.t',
+    't/metaclasses/metarole.t',
+    't/metaclasses/metarole_combination.t',
+    't/metaclasses/metarole_on_anon.t',
+    't/metaclasses/metarole_w_metaclass_pm.t',
+    't/metaclasses/metaroles_of_metaroles.t',
+    't/metaclasses/moose_exporter.t',
+    't/metaclasses/moose_exporter_trait_aliases.t',
+    't/metaclasses/moose_for_meta.t',
+    't/metaclasses/moose_nonmoose_metatrait_init_order.t',
+    't/metaclasses/moose_nonmoose_moose_chain_init_meta.t',
+    't/metaclasses/moose_w_metaclass.t',
+    't/metaclasses/new_metaclass.t',
+    't/metaclasses/new_object_BUILD.t',
+    't/metaclasses/overloading.t',
+    't/metaclasses/reinitialize.t',
+    't/metaclasses/use_base_of_moose.t',
+    't/moose_util/apply_roles.t',
+    't/moose_util/create_alias.t',
+    't/moose_util/ensure_all_roles.t',
+    't/moose_util/method_mod_args.t',
+    't/moose_util/moose_util.t',
+    't/moose_util/moose_util_does_role.t',
+    't/moose_util/moose_util_search_class_by_role.t',
+    't/moose_util/resolve_alias.t',
+    't/moose_util/with_traits.t',
+    't/native_traits/array_coerce.t',
+    't/native_traits/array_from_role.t',
+    't/native_traits/array_subtypes.t',
+    't/native_traits/array_trigger.t',
+    't/native_traits/collection_with_roles.t',
+    't/native_traits/custom_instance.t',
+    't/native_traits/hash_coerce.t',
+    't/native_traits/hash_subtypes.t',
+    't/native_traits/hash_trigger.t',
+    't/native_traits/remove_attribute.t',
+    't/native_traits/shallow_clone.t',
+    't/native_traits/trait_array.t',
+    't/native_traits/trait_bool.t',
+    't/native_traits/trait_code.t',
+    't/native_traits/trait_counter.t',
+    't/native_traits/trait_hash.t',
+    't/native_traits/trait_number.t',
+    't/native_traits/trait_string.t',
+    't/recipes/basics_bankaccount_methodmodifiersandsubclassing.t',
+    't/recipes/basics_binarytree_attributefeatures.t',
+    't/recipes/basics_company_subtypes.t',
+    't/recipes/basics_datetime_extendingnonmooseparent.t',
+    't/recipes/basics_document_augmentandinner.t',
+    't/recipes/basics_genome_overloadingsubtypesandcoercion.t',
+    't/recipes/basics_http_subtypesandcoercion.t',
+    't/recipes/basics_point_attributesandsubclassing.t',
+    't/recipes/extending_debugging_baseclassrole.t',
+    't/recipes/extending_mooseish_moosesugar.t',
+    't/recipes/legacy_debugging_baseclassreplacement.t',
+    't/recipes/legacy_labeled_attributemetaclass.t',
+    't/recipes/meta_globref_instancemetaclass.t',
+    't/recipes/meta_labeled_attributetrait.t',
+    't/recipes/meta_privateorpublic_methodmetaclass.t',
+    't/recipes/meta_table_metaclasstrait.t',
+    't/recipes/roles_applicationtoinstance.t',
+    't/recipes/roles_comparable_codereuse.t',
+    't/recipes/roles_restartable_advancedcomposition.t',
+    't/roles/anonymous_roles.t',
+    't/roles/application_toclass.t',
+    't/roles/apply_role.t',
+    't/roles/build.t',
+    't/roles/conflict_many_methods.t',
+    't/roles/create_role.t',
+    't/roles/create_role_subclass.t',
+    't/roles/empty_method_modifiers_meta_bug.t',
+    't/roles/extending_role_attrs.t',
+    't/roles/free_anonymous_roles.t',
+    't/roles/imported_required_method.t',
+    't/roles/meta_role.t',
+    't/roles/method_aliasing_in_composition.t',
+    't/roles/method_exclusion_in_composition.t',
+    't/roles/method_modifiers.t',
+    't/roles/methods.t',
+    't/roles/more_alias_and_exclude.t',
+    't/roles/more_role_edge_cases.t',
+    't/roles/new_meta_role.t',
+    't/roles/overloading_combine_to_class.t',
+    't/roles/overloading_combine_to_instance.t',
+    't/roles/overloading_combine_to_role.t',
+    't/roles/overloading_composition_errors.t',
+    't/roles/overloading_remove_attributes_bug.t',
+    't/roles/overloading_to_class.t',
+    't/roles/overloading_to_instance.t',
+    't/roles/overloading_to_role.t',
+    't/roles/overriding.t',
+    't/roles/reinitialize_anon_role.t',
+    't/roles/role.t',
+    't/roles/role_attr_application.t',
+    't/roles/role_attribute_conflict.t',
+    't/roles/role_attrs.t',
+    't/roles/role_compose_requires.t',
+    't/roles/role_composite.t',
+    't/roles/role_composite_exclusion.t',
+    't/roles/role_composition_attributes.t',
+    't/roles/role_composition_conflict_detection.t',
+    't/roles/role_composition_errors.t',
+    't/roles/role_composition_method_mods.t',
+    't/roles/role_composition_methods.t',
+    't/roles/role_composition_override.t',
+    't/roles/role_composition_req_methods.t',
+    't/roles/role_conflict_detection.t',
+    't/roles/role_conflict_edge_cases.t',
+    't/roles/role_consumers.t',
+    't/roles/role_exclusion.t',
+    't/roles/role_exclusion_and_alias_bug.t',
+    't/roles/role_for_combination.t',
+    't/roles/roles_and_method_cloning.t',
+    't/roles/roles_and_req_method_edge_cases.t',
+    't/roles/roles_applied_in_create.t',
+    't/roles/run_time_role_composition.t',
+    't/roles/runtime_roles_and_attrs.t',
+    't/roles/runtime_roles_and_nonmoose.t',
+    't/roles/runtime_roles_w_params.t',
+    't/roles/use_base_does.t',
+    't/test_moose/test_moose.t',
+    't/test_moose/test_moose_does_ok.t',
+    't/test_moose/test_moose_has_attribute_ok.t',
+    't/test_moose/test_moose_meta_ok.t',
+    't/test_moose/with_immutable.t',
+    't/todo_tests/exception_reflects_failed_constraint.t',
+    't/todo_tests/immutable_n_around.t',
+    't/todo_tests/moose_and_threads.t',
+    't/todo_tests/replacing_super_methods.t',
+    't/todo_tests/required_role_accessors.t',
+    't/todo_tests/role_attr_methods_original_package.t',
+    't/todo_tests/role_insertion_order.t',
+    't/todo_tests/various_role_features.t',
+    't/todo_tests/wrong-inner.t',
+    't/type_constraints/advanced_type_creation.t',
+    't/type_constraints/class_subtypes.t',
+    't/type_constraints/class_type_constraint.t',
+    't/type_constraints/coerced_parameterized_types.t',
+    't/type_constraints/container_type_coercion.t',
+    't/type_constraints/container_type_constraint.t',
+    't/type_constraints/custom_parameterized_types.t',
+    't/type_constraints/custom_type_errors.t',
+    't/type_constraints/define_type_twice_throws.t',
+    't/type_constraints/duck_type_handles.t',
+    't/type_constraints/duck_types.t',
+    't/type_constraints/enum.t',
+    't/type_constraints/inlining.t',
+    't/type_constraints/match_type_operator.t',
+    't/type_constraints/maybe_type_constraint.t',
+    't/type_constraints/misc_type_tests.t',
+    't/type_constraints/name_conflicts.t',
+    't/type_constraints/normalize_type_name.t',
+    't/type_constraints/parameterize_from.t',
+    't/type_constraints/role_type_constraint.t',
+    't/type_constraints/subtype_auto_vivify_parent.t',
+    't/type_constraints/subtyping_parameterized_types.t',
+    't/type_constraints/subtyping_union_types.t',
+    't/type_constraints/throw_error.t',
+    't/type_constraints/type_coersion_on_lazy_attributes.t',
+    't/type_constraints/type_names.t',
+    't/type_constraints/type_notation_parser.t',
+    't/type_constraints/types_and_undef.t',
+    't/type_constraints/union_is_a_type_of.t',
+    't/type_constraints/union_types.t',
+    't/type_constraints/union_types_and_coercions.t',
+    't/type_constraints/util_find_type_constraint.t',
+    't/type_constraints/util_more_type_coercion.t',
+    't/type_constraints/util_std_type_constraints.t',
+    't/type_constraints/util_type_coercion.t',
+    't/type_constraints/util_type_constraints.t',
+    't/type_constraints/util_type_constraints_export.t',
+    't/type_constraints/util_type_reloading.t',
+    't/type_constraints/with-specio.t',
+    't/zzz-check-breaks.t'
+);
+
+notabs_ok($_) foreach @files;
+done_testing;
@@ -0,0 +1,234 @@
+
+use strict;
+use warnings;
+
+use Test::More;
+
+use Test::Requires {
+    'Test::Pod::Coverage' => '1.04',    # skip all if not installed
+};
+
+# This is a stripped down version of all_pod_coverage_ok which lets us
+# vary the trustme parameter per module.
+my @modules
+    = grep { !/Accessor::Native.*$/ && !/::Conflicts$/ && !/^Moose::Exception::/ } all_modules();
+plan tests => scalar @modules;
+
+my %trustme = (
+    'Moose::Exception' => ['BUILD'],
+    'Class::MOP'       => [
+        'DEBUG_NO_META',
+        'HAVE_ISAREV',
+        'IS_RUNNING_ON_5_10',
+        'subname',
+        'in_global_destruction',
+        'check_package_cache_flag',
+        'load_first_existing_class',
+        'is_class_loaded',
+        'load_class',
+    ],
+    'Class::MOP::Attribute' => ['process_accessors'],
+    'Class::MOP::Class'     => [
+
+        # deprecated
+        'alias_method',
+        'compute_all_applicable_attributes',
+        'compute_all_applicable_methods',
+
+        # unfinished feature
+        'add_dependent_meta_instance',
+        'add_meta_instance_dependencies',
+        'invalidate_meta_instance',
+        'invalidate_meta_instances',
+        'remove_dependent_meta_instance',
+        'remove_meta_instance_dependencies',
+        'update_meta_instance_dependencies',
+
+        # effectively internal
+        'check_metaclass_compatibility',
+        'clone_instance',
+        'construct_class_instance',
+        'construct_instance',
+        'create_meta_instance',
+        'reset_package_cache_flag',
+        'update_package_cache_flag',
+        'reinitialize',
+
+        # doc'd with rebless_instance
+        'rebless_instance_away',
+
+        # deprecated
+        'get_attribute_map',
+    ],
+    'Class::MOP::Class::Immutable::Trait'             => ['.+'],
+    'Class::MOP::Class::Immutable::Class::MOP::Class' => ['.+'],
+    'Class::MOP::Deprecated'                          => ['.+'],
+    'Class::MOP::Instance'                            => [
+        qw( BUILDARGS
+            bless_instance_structure
+            is_dependent_on_superclasses ),
+    ],
+    'Class::MOP::Instance' => [
+        qw( BUILDARGS
+            bless_instance_structure
+            is_dependent_on_superclasses ),
+    ],
+    'Class::MOP::Method::Accessor' => [
+        qw( generate_accessor_method
+            generate_accessor_method_inline
+            generate_clearer_method
+            generate_clearer_method_inline
+            generate_predicate_method
+            generate_predicate_method_inline
+            generate_reader_method
+            generate_reader_method_inline
+            generate_writer_method
+            generate_writer_method_inline
+            initialize_body
+            )
+    ],
+    'Class::MOP::Method::Constructor' => [
+        qw( attributes
+            generate_constructor_method
+            generate_constructor_method_inline
+            initialize_body
+            meta_instance
+            options
+            )
+    ],
+    'Class::MOP::Method::Generated' => [
+        qw( new
+            definition_context
+            is_inline
+            initialize_body
+            )
+    ],
+    'Class::MOP::MiniTrait'            => ['.+'],
+    'Class::MOP::Mixin::AttributeCore' => ['.+'],
+    'Class::MOP::Mixin::HasAttributes' => ['.+'],
+    'Class::MOP::Mixin::HasMethods'    => ['.+'],
+    'Class::MOP::Mixin::HasOverloads'  => ['.+'],
+    'Class::MOP::Overload'             => [ 'attach_to_class' ],
+    'Class::MOP::Package' => [ 'get_method_map', 'wrap_method_body' ],
+    'Moose'                  => [ 'init_meta', 'throw_error' ],
+    'Moose::Error::Confess'  => ['new'],
+    'Moose::Error::Util'     => ['.+'],
+    'Moose::Meta::Attribute' => [
+        qw( interpolate_class
+            throw_error
+            attach_to_class
+            )
+    ],
+    'Moose::Meta::Attribute::Native::MethodProvider::Array'   => ['.+'],
+    'Moose::Meta::Attribute::Native::MethodProvider::Bool'    => ['.+'],
+    'Moose::Meta::Attribute::Native::MethodProvider::Code'    => ['.+'],
+    'Moose::Meta::Attribute::Native::MethodProvider::Counter' => ['.+'],
+    'Moose::Meta::Attribute::Native::MethodProvider::Hash'    => ['.+'],
+    'Moose::Meta::Attribute::Native::MethodProvider::String'  => ['.+'],
+    'Moose::Meta::Class'                                      => [
+        qw( check_metaclass_compatibility
+            construct_instance
+            create_error
+            raise_error
+            reinitialize
+            superclasses
+            )
+    ],
+    'Moose::Meta::Class::Immutable::Trait' => ['.+'],
+    'Moose::Meta::Method'                  => ['throw_error'],
+    'Moose::Meta::Method::Accessor'        => [
+        qw( generate_accessor_method
+            generate_accessor_method_inline
+            generate_clearer_method
+            generate_predicate_method
+            generate_reader_method
+            generate_reader_method_inline
+            generate_writer_method
+            generate_writer_method_inline
+            new
+            )
+    ],
+    'Moose::Meta::Method::Constructor' => [
+        qw( attributes
+            initialize_body
+            meta_instance
+            new
+            options
+            )
+    ],
+    'Moose::Meta::Method::Destructor' => [ 'initialize_body', 'options' ],
+    'Moose::Meta::Method::Meta'       => ['wrap'],
+    'Moose::Meta::Role'               => [
+        qw( alias_method
+            get_method_modifier_list
+            reinitialize
+            reset_package_cache_flag
+            update_package_cache_flag
+            wrap_method_body
+            )
+    ],
+    'Moose::Meta::Mixin::AttributeCore' => ['.+'],
+    'Moose::Meta::Role::Composite'      => [
+        qw( add_method
+            get_method
+            get_method_list
+            has_method
+            is_anon
+            add_overloaded_operator
+            get_all_overloaded_operators
+            get_overload_fallback_value
+            is_overloaded
+            set_overload_fallback_value
+            ),
+    ],
+    'Moose::Object' => [ 'BUILDALL', 'DEMOLISHALL' ],
+    'Moose::Role'   => [
+        qw( after
+            around
+            augment
+            before
+            extends
+            has
+            inner
+            override
+            super
+            with
+            init_meta )
+    ],
+    'Moose::Meta::TypeCoercion'        => ['compile_type_coercion'],
+    'Moose::Meta::TypeCoercion::Union' => ['compile_type_coercion'],
+    'Moose::Meta::TypeConstraint' => [qw( compile_type_constraint inlined )],
+    'Moose::Meta::TypeConstraint::Class' =>
+        [qw( equals is_a_type_of is_a_subtype_of )],
+    'Moose::Meta::TypeConstraint::Enum' => [qw( constraint equals )],
+    'Moose::Meta::TypeConstraint::DuckType' =>
+        [qw( constraint equals get_message )],
+    'Moose::Meta::TypeConstraint::Parameterizable' => ['.+'],
+    'Moose::Meta::TypeConstraint::Parameterized'   => ['.+'],
+    'Moose::Meta::TypeConstraint::Role'  => [qw( equals is_a_type_of )],
+    'Moose::Meta::TypeConstraint::Union' => [
+        qw( compile_type_constraint
+            coercion
+            has_coercion
+            can_be_inlined
+            inline_environment )
+    ],
+    'Moose::Util'                  => ['add_method_modifier'],
+    'Moose::Util::MetaRole'        => ['apply_metaclass_roles'],
+    'Moose::Util::TypeConstraints' => ['find_or_create_type_constraint'],
+    'Moose::Util::TypeConstraints::Builtins' => ['.+'],
+);
+
+for my $module ( sort @modules ) {
+
+    my $trustme = [];
+    if ( $trustme{$module} ) {
+        my $methods = join '|', @{ $trustme{$module} };
+        $trustme = [qr/^(?:$methods)$/];
+    }
+
+    pod_coverage_ok(
+        $module, { trustme => $trustme },
+        "Pod coverage for $module"
+    );
+}
@@ -0,0 +1,346 @@
+use strict;
+use warnings;
+
+use Test::Spelling;
+
+my @stopwords;
+for (<DATA>) {
+    chomp;
+    push @stopwords, $_
+        unless /\A (?: \# | \s* \z)/msx;    # skip comments, whitespace
+}
+
+add_stopwords(@stopwords);
+local $ENV{LC_ALL} = 'C';
+set_spell_cmd('aspell list -l en');
+all_pod_files_spelling_ok;
+
+__DATA__
+## personal names
+Aankhen
+Anders
+Aran
+Buels
+Clary
+Debolaz
+Deltac
+Etheridge
+Florian
+Goro
+Goulah
+Hardison
+Kinyon
+Kinyon's
+Kogman
+Lanyon
+Luehrs
+McWhirter
+Pearcey
+Piotr
+Prather
+Ragwitz
+Reis
+Rockway
+Roditi
+Rolsky
+Roszatycki
+Roszatycki's
+SL
+Sedlacek
+Shlomi
+Stevan
+Vilain
+Yuval
+autarch
+backported
+backports
+blblack
+bluefeet
+chansen
+chromatic's
+dexter
+doy
+ewilhelm
+frodwith
+gphat
+groditi
+ingy
+jgoulah
+jrockway
+kolibrie
+konobi
+lbr
+merlyn
+mst
+nothingmuch
+perigrin
+phaylon
+rafl
+rindolf
+rjbs
+rlb
+robkinyon
+sartak
+stevan
+tozt
+wreis
+
+## proper names
+AOP
+CentOS
+CLOS
+CPAN
+OCaml
+SVN
+ohloh
+
+## Moose
+AttributeHelpers
+BUILDALL
+BUILDARGS
+BankAccount
+BankAccount's
+BinaryTree
+CLR
+CheckingAccount
+DEMOLISHALL
+Debuggable
+JVM
+METACLASS
+Metaclass
+MOPs
+MetaModel
+MetaObject
+Metalevel
+MooseX
+Num
+OtherName
+PosInt
+PositiveInt
+RoleSummation
+Specio
+Str
+TypeContraints
+clearers
+composable
+hardcode
+immutabilization
+immutabilize
+introspectable
+metaclass
+metaclass's
+metadata
+metaobject
+metaobjects
+metaprogrammer
+metarole
+metaroles
+metatraits
+mixins
+oose
+ro
+rw
+AttributeIsRequired
+ValidationFailedForTypeConstraint
+
+## computerese
+API
+APIs
+Baz
+Changelog
+Coercions
+DUCKTYPE
+DWIM
+GitHub
+GitHub's
+Haskell
+IRC
+Immutabilization
+Inlinable
+JSON
+Lexically
+O'Caml
+OO
+OOP
+ORM
+Overengineered
+ROLETYPE
+SUBCLASSES
+SUBTYPES
+Subclasses
+Smalltalk
+Subtypes
+TODO
+UNIMPORTING
+URI
+Unported
+Whitelist
+# from the Support manual talking about version numbers
+YY
+YYZZ
+ZZ
+arity
+arrayrefs
+autodelegation
+blog
+clearers
+codebase
+coercions
+committer
+committers
+compat
+continutation
+contrib
+datetimes
+dec
+decrement
+definedness
+deinitialized
+deprecations
+destructor
+destructors
+destructuring
+dev
+discoverable
+env
+eval'ing
+extensibility
+hashrefs
+hotspots
+immutabilize
+immutabilized
+immutabilizes
+incrementing
+inlinable
+inline
+inlines
+installable
+instantiation
+interoperable
+invocant
+invocant's
+irc
+isa
+kv
+login
+matcher
+metadata
+mixin
+mixins
+mul
+munge
+namespace
+Namespace
+namespace's
+namespaced
+namespaces
+namespacing
+natatime
+# as in required-ness
+ness
+optimizations
+overridable
+parameterizable
+parameterization
+parameterize
+parameterized
+parameterizes
+params
+pluggable
+plugins
+polymorphism
+prechecking
+prepends
+pu
+rebase
+rebased
+rebasing
+rebless
+reblesses
+reblessing
+refactored
+refactoring
+rethrows
+runtime
+serializer
+sigil
+sigils
+stacktrace
+stacktraces
+stateful
+subclass's
+subclassable
+subclasses
+subname
+subtype
+subtypes
+subtyping
+unblessed
+unexport
+unimporting
+uninitialize
+unordered
+unresolvable
+unsets
+unsettable
+utils
+whitelisted
+workflow
+workflows
+
+## other jargon
+bey
+gey
+
+## neologisms
+breakability
+delegatee
+featureful
+hackery
+hacktern
+undeprecate
+wrappee
+
+## compound
+# half-assed
+assed
+# role-ish, Ruby-ish, medium-to-large-ish
+ish
+# kool-aid
+kool
+# pre-5.10
+pre
+# vice versa
+versa
+lookup
+# co-maint
+maint
+
+## slang
+C'mon
+might've
+Nuff
+
+## things that should be in the dictionary, but are not
+attribute's
+declaratively
+everybody's
+everyone's
+human's
+indices
+initializers
+newfound
+reimplements
+reinitializes
+specializer
+unintrusive
+
+## misspelt on purpose
+emali
+uniq
+
+#docgenerator
+fixLineLength
+getExceptionsToMessages
+placeCommasAndAnd
+shortenToEighty
@@ -37,7 +37,7 @@ use Test::Requires {
 use Test::DependentModules qw( test_module );
 
 use DateTime;
-use List::MoreUtils qw(any);
+use List::Util 1.33 qw(any);
 use Moose ();
 
 diag(     'Test run performed at: '
@@ -0,0 +1,443 @@
+use 5.006;
+use strict;
+use warnings;
+
+# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.051
+
+use Test::More 0.94;
+
+plan tests => 367 + ($ENV{AUTHOR_TESTING} ? 1 : 0);
+
+my @module_files = (
+    'Class/MOP.pm',
+    'Class/MOP/Class/Immutable/Trait.pm',
+    'Class/MOP/Deprecated.pm',
+    'Class/MOP/Instance.pm',
+    'Class/MOP/Method.pm',
+    'Class/MOP/Method/Generated.pm',
+    'Class/MOP/Method/Meta.pm',
+    'Class/MOP/MiniTrait.pm',
+    'Class/MOP/Mixin.pm',
+    'Class/MOP/Mixin/AttributeCore.pm',
+    'Class/MOP/Mixin/HasMethods.pm',
+    'Class/MOP/Mixin/HasOverloads.pm',
+    'Class/MOP/Object.pm',
+    'Class/MOP/Overload.pm',
+    'Moose.pm',
+    'Moose/Conflicts.pm',
+    'Moose/Deprecated.pm',
+    'Moose/Exception.pm',
+    'Moose/Exception/AccessorMustReadWrite.pm',
+    'Moose/Exception/AddParameterizableTypeTakesParameterizableType.pm',
+    'Moose/Exception/AddRoleTakesAMooseMetaRoleInstance.pm',
+    'Moose/Exception/AddRoleToARoleTakesAMooseMetaRole.pm',
+    'Moose/Exception/ApplyTakesABlessedInstance.pm',
+    'Moose/Exception/AttachToClassNeedsAClassMOPClassInstanceOrASubclass.pm',
+    'Moose/Exception/AttributeConflictInRoles.pm',
+    'Moose/Exception/AttributeConflictInSummation.pm',
+    'Moose/Exception/AttributeExtensionIsNotSupportedInRoles.pm',
+    'Moose/Exception/AttributeIsRequired.pm',
+    'Moose/Exception/AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass.pm',
+    'Moose/Exception/AttributeNamesDoNotMatch.pm',
+    'Moose/Exception/AttributeValueIsNotAnObject.pm',
+    'Moose/Exception/AttributeValueIsNotDefined.pm',
+    'Moose/Exception/AutoDeRefNeedsArrayRefOrHashRef.pm',
+    'Moose/Exception/BadOptionFormat.pm',
+    'Moose/Exception/BothBuilderAndDefaultAreNotAllowed.pm',
+    'Moose/Exception/BuilderDoesNotExist.pm',
+    'Moose/Exception/BuilderMethodNotSupportedForAttribute.pm',
+    'Moose/Exception/BuilderMethodNotSupportedForInlineAttribute.pm',
+    'Moose/Exception/BuilderMustBeAMethodName.pm',
+    'Moose/Exception/CallingMethodOnAnImmutableInstance.pm',
+    'Moose/Exception/CallingReadOnlyMethodOnAnImmutableInstance.pm',
+    'Moose/Exception/CanExtendOnlyClasses.pm',
+    'Moose/Exception/CanOnlyConsumeRole.pm',
+    'Moose/Exception/CanOnlyWrapBlessedCode.pm',
+    'Moose/Exception/CanReblessOnlyIntoASubclass.pm',
+    'Moose/Exception/CanReblessOnlyIntoASuperclass.pm',
+    'Moose/Exception/CannotAddAdditionalTypeCoercionsToUnion.pm',
+    'Moose/Exception/CannotAddAsAnAttributeToARole.pm',
+    'Moose/Exception/CannotApplyBaseClassRolesToRole.pm',
+    'Moose/Exception/CannotAssignValueToReadOnlyAccessor.pm',
+    'Moose/Exception/CannotAugmentIfLocalMethodPresent.pm',
+    'Moose/Exception/CannotAugmentNoSuperMethod.pm',
+    'Moose/Exception/CannotAutoDerefWithoutIsa.pm',
+    'Moose/Exception/CannotAutoDereferenceTypeConstraint.pm',
+    'Moose/Exception/CannotCalculateNativeType.pm',
+    'Moose/Exception/CannotCallAnAbstractBaseMethod.pm',
+    'Moose/Exception/CannotCallAnAbstractMethod.pm',
+    'Moose/Exception/CannotCoerceAWeakRef.pm',
+    'Moose/Exception/CannotCoerceAttributeWhichHasNoCoercion.pm',
+    'Moose/Exception/CannotCreateHigherOrderTypeWithoutATypeParameter.pm',
+    'Moose/Exception/CannotCreateMethodAliasLocalMethodIsPresent.pm',
+    'Moose/Exception/CannotCreateMethodAliasLocalMethodIsPresentInClass.pm',
+    'Moose/Exception/CannotDelegateLocalMethodIsPresent.pm',
+    'Moose/Exception/CannotDelegateWithoutIsa.pm',
+    'Moose/Exception/CannotFindDelegateMetaclass.pm',
+    'Moose/Exception/CannotFindType.pm',
+    'Moose/Exception/CannotFindTypeGivenToMatchOnType.pm',
+    'Moose/Exception/CannotFixMetaclassCompatibility.pm',
+    'Moose/Exception/CannotGenerateInlineConstraint.pm',
+    'Moose/Exception/CannotInitializeMooseMetaRoleComposite.pm',
+    'Moose/Exception/CannotInlineTypeConstraintCheck.pm',
+    'Moose/Exception/CannotLocatePackageInINC.pm',
+    'Moose/Exception/CannotMakeMetaclassCompatible.pm',
+    'Moose/Exception/CannotOverrideALocalMethod.pm',
+    'Moose/Exception/CannotOverrideBodyOfMetaMethods.pm',
+    'Moose/Exception/CannotOverrideLocalMethodIsPresent.pm',
+    'Moose/Exception/CannotOverrideNoSuperMethod.pm',
+    'Moose/Exception/CannotRegisterUnnamedTypeConstraint.pm',
+    'Moose/Exception/CannotUseLazyBuildAndDefaultSimultaneously.pm',
+    'Moose/Exception/CircularReferenceInAlso.pm',
+    'Moose/Exception/ClassDoesNotHaveInitMeta.pm',
+    'Moose/Exception/ClassDoesTheExcludedRole.pm',
+    'Moose/Exception/ClassNamesDoNotMatch.pm',
+    'Moose/Exception/CloneObjectExpectsAnInstanceOfMetaclass.pm',
+    'Moose/Exception/CodeBlockMustBeACodeRef.pm',
+    'Moose/Exception/CoercingWithoutCoercions.pm',
+    'Moose/Exception/CoercionAlreadyExists.pm',
+    'Moose/Exception/CoercionNeedsTypeConstraint.pm',
+    'Moose/Exception/ConflictDetectedInCheckRoleExclusions.pm',
+    'Moose/Exception/ConflictDetectedInCheckRoleExclusionsInToClass.pm',
+    'Moose/Exception/ConstructClassInstanceTakesPackageName.pm',
+    'Moose/Exception/CouldNotCreateMethod.pm',
+    'Moose/Exception/CouldNotCreateWriter.pm',
+    'Moose/Exception/CouldNotEvalConstructor.pm',
+    'Moose/Exception/CouldNotEvalDestructor.pm',
+    'Moose/Exception/CouldNotFindTypeConstraintToCoerceFrom.pm',
+    'Moose/Exception/CouldNotGenerateInlineAttributeMethod.pm',
+    'Moose/Exception/CouldNotLocateTypeConstraintForUnion.pm',
+    'Moose/Exception/CouldNotParseType.pm',
+    'Moose/Exception/CreateMOPClassTakesArrayRefOfAttributes.pm',
+    'Moose/Exception/CreateMOPClassTakesArrayRefOfSuperclasses.pm',
+    'Moose/Exception/CreateMOPClassTakesHashRefOfMethods.pm',
+    'Moose/Exception/CreateTakesArrayRefOfRoles.pm',
+    'Moose/Exception/CreateTakesHashRefOfAttributes.pm',
+    'Moose/Exception/CreateTakesHashRefOfMethods.pm',
+    'Moose/Exception/DefaultToMatchOnTypeMustBeCodeRef.pm',
+    'Moose/Exception/DelegationToAClassWhichIsNotLoaded.pm',
+    'Moose/Exception/DelegationToARoleWhichIsNotLoaded.pm',
+    'Moose/Exception/DelegationToATypeWhichIsNotAClass.pm',
+    'Moose/Exception/DoesRequiresRoleName.pm',
+    'Moose/Exception/EnumCalledWithAnArrayRefAndAdditionalArgs.pm',
+    'Moose/Exception/EnumValuesMustBeString.pm',
+    'Moose/Exception/ExtendsMissingArgs.pm',
+    'Moose/Exception/HandlesMustBeAHashRef.pm',
+    'Moose/Exception/IllegalInheritedOptions.pm',
+    'Moose/Exception/IllegalMethodTypeToAddMethodModifier.pm',
+    'Moose/Exception/IncompatibleMetaclassOfSuperclass.pm',
+    'Moose/Exception/InitMetaRequiresClass.pm',
+    'Moose/Exception/InitializeTakesUnBlessedPackageName.pm',
+    'Moose/Exception/InstanceBlessedIntoWrongClass.pm',
+    'Moose/Exception/InstanceMustBeABlessedReference.pm',
+    'Moose/Exception/InvalidArgPassedToMooseUtilMetaRole.pm',
+    'Moose/Exception/InvalidArgumentToMethod.pm',
+    'Moose/Exception/InvalidArgumentsToTraitAliases.pm',
+    'Moose/Exception/InvalidBaseTypeGivenToCreateParameterizedTypeConstraint.pm',
+    'Moose/Exception/InvalidHandleValue.pm',
+    'Moose/Exception/InvalidHasProvidedInARole.pm',
+    'Moose/Exception/InvalidNameForType.pm',
+    'Moose/Exception/InvalidOverloadOperator.pm',
+    'Moose/Exception/InvalidRoleApplication.pm',
+    'Moose/Exception/InvalidTypeConstraint.pm',
+    'Moose/Exception/InvalidTypeGivenToCreateParameterizedTypeConstraint.pm',
+    'Moose/Exception/InvalidValueForIs.pm',
+    'Moose/Exception/IsaDoesNotDoTheRole.pm',
+    'Moose/Exception/IsaLacksDoesMethod.pm',
+    'Moose/Exception/LazyAttributeNeedsADefault.pm',
+    'Moose/Exception/Legacy.pm',
+    'Moose/Exception/MOPAttributeNewNeedsAttributeName.pm',
+    'Moose/Exception/MatchActionMustBeACodeRef.pm',
+    'Moose/Exception/MessageParameterMustBeCodeRef.pm',
+    'Moose/Exception/MetaclassIsAClassNotASubclassOfGivenMetaclass.pm',
+    'Moose/Exception/MetaclassIsARoleNotASubclassOfGivenMetaclass.pm',
+    'Moose/Exception/MetaclassIsNotASubclassOfGivenMetaclass.pm',
+    'Moose/Exception/MetaclassMustBeASubclassOfMooseMetaClass.pm',
+    'Moose/Exception/MetaclassMustBeASubclassOfMooseMetaRole.pm',
+    'Moose/Exception/MetaclassMustBeDerivedFromClassMOPClass.pm',
+    'Moose/Exception/MetaclassNotLoaded.pm',
+    'Moose/Exception/MetaclassTypeIncompatible.pm',
+    'Moose/Exception/MethodExpectedAMetaclassObject.pm',
+    'Moose/Exception/MethodExpectsFewerArgs.pm',
+    'Moose/Exception/MethodExpectsMoreArgs.pm',
+    'Moose/Exception/MethodModifierNeedsMethodName.pm',
+    'Moose/Exception/MethodNameConflictInRoles.pm',
+    'Moose/Exception/MethodNameNotFoundInInheritanceHierarchy.pm',
+    'Moose/Exception/MethodNameNotGiven.pm',
+    'Moose/Exception/MustDefineAMethodName.pm',
+    'Moose/Exception/MustDefineAnAttributeName.pm',
+    'Moose/Exception/MustDefineAnOverloadOperator.pm',
+    'Moose/Exception/MustHaveAtLeastOneValueToEnumerate.pm',
+    'Moose/Exception/MustPassAHashOfOptions.pm',
+    'Moose/Exception/MustPassAMooseMetaRoleInstanceOrSubclass.pm',
+    'Moose/Exception/MustPassAPackageNameOrAnExistingClassMOPPackageInstance.pm',
+    'Moose/Exception/MustPassEvenNumberOfArguments.pm',
+    'Moose/Exception/MustPassEvenNumberOfAttributeOptions.pm',
+    'Moose/Exception/MustProvideANameForTheAttribute.pm',
+    'Moose/Exception/MustSpecifyAtleastOneMethod.pm',
+    'Moose/Exception/MustSpecifyAtleastOneRole.pm',
+    'Moose/Exception/MustSpecifyAtleastOneRoleToApplicant.pm',
+    'Moose/Exception/MustSupplyAClassMOPAttributeInstance.pm',
+    'Moose/Exception/MustSupplyADelegateToMethod.pm',
+    'Moose/Exception/MustSupplyAMetaclass.pm',
+    'Moose/Exception/MustSupplyAMooseMetaAttributeInstance.pm',
+    'Moose/Exception/MustSupplyAnAccessorTypeToConstructWith.pm',
+    'Moose/Exception/MustSupplyAnAttributeToConstructWith.pm',
+    'Moose/Exception/MustSupplyArrayRefAsCurriedArguments.pm',
+    'Moose/Exception/MustSupplyPackageNameAndName.pm',
+    'Moose/Exception/NeedsTypeConstraintUnionForTypeCoercionUnion.pm',
+    'Moose/Exception/NeitherAttributeNorAttributeNameIsGiven.pm',
+    'Moose/Exception/NeitherClassNorClassNameIsGiven.pm',
+    'Moose/Exception/NeitherRoleNorRoleNameIsGiven.pm',
+    'Moose/Exception/NeitherTypeNorTypeNameIsGiven.pm',
+    'Moose/Exception/NoAttributeFoundInSuperClass.pm',
+    'Moose/Exception/NoBodyToInitializeInAnAbstractBaseClass.pm',
+    'Moose/Exception/NoCasesMatched.pm',
+    'Moose/Exception/NoConstraintCheckForTypeConstraint.pm',
+    'Moose/Exception/NoDestructorClassSpecified.pm',
+    'Moose/Exception/NoImmutableTraitSpecifiedForClass.pm',
+    'Moose/Exception/NoParentGivenToSubtype.pm',
+    'Moose/Exception/OnlyInstancesCanBeCloned.pm',
+    'Moose/Exception/OperatorIsRequired.pm',
+    'Moose/Exception/OverloadConflictInSummation.pm',
+    'Moose/Exception/OverloadRequiresAMetaClass.pm',
+    'Moose/Exception/OverloadRequiresAMetaMethod.pm',
+    'Moose/Exception/OverloadRequiresAMetaOverload.pm',
+    'Moose/Exception/OverloadRequiresAMethodNameOrCoderef.pm',
+    'Moose/Exception/OverloadRequiresAnOperator.pm',
+    'Moose/Exception/OverloadRequiresNamesForCoderef.pm',
+    'Moose/Exception/OverrideConflictInComposition.pm',
+    'Moose/Exception/OverrideConflictInSummation.pm',
+    'Moose/Exception/PackageDoesNotUseMooseExporter.pm',
+    'Moose/Exception/PackageNameAndNameParamsNotGivenToWrap.pm',
+    'Moose/Exception/PackagesAndModulesAreNotCachable.pm',
+    'Moose/Exception/ParameterIsNotSubtypeOfParent.pm',
+    'Moose/Exception/ReferencesAreNotAllowedAsDefault.pm',
+    'Moose/Exception/RequiredAttributeLacksInitialization.pm',
+    'Moose/Exception/RequiredAttributeNeedsADefault.pm',
+    'Moose/Exception/RequiredMethodsImportedByClass.pm',
+    'Moose/Exception/RequiredMethodsNotImplementedByClass.pm',
+    'Moose/Exception/Role/Attribute.pm',
+    'Moose/Exception/Role/AttributeName.pm',
+    'Moose/Exception/Role/Class.pm',
+    'Moose/Exception/Role/EitherAttributeOrAttributeName.pm',
+    'Moose/Exception/Role/Instance.pm',
+    'Moose/Exception/Role/InstanceClass.pm',
+    'Moose/Exception/Role/InvalidAttributeOptions.pm',
+    'Moose/Exception/Role/Method.pm',
+    'Moose/Exception/Role/ParamsHash.pm',
+    'Moose/Exception/Role/Role.pm',
+    'Moose/Exception/Role/RoleForCreate.pm',
+    'Moose/Exception/Role/RoleForCreateMOPClass.pm',
+    'Moose/Exception/Role/TypeConstraint.pm',
+    'Moose/Exception/RoleDoesTheExcludedRole.pm',
+    'Moose/Exception/RoleExclusionConflict.pm',
+    'Moose/Exception/RoleNameRequired.pm',
+    'Moose/Exception/RoleNameRequiredForMooseMetaRole.pm',
+    'Moose/Exception/RolesDoNotSupportAugment.pm',
+    'Moose/Exception/RolesDoNotSupportExtends.pm',
+    'Moose/Exception/RolesDoNotSupportInner.pm',
+    'Moose/Exception/RolesDoNotSupportRegexReferencesForMethodModifiers.pm',
+    'Moose/Exception/RolesInCreateTakesAnArrayRef.pm',
+    'Moose/Exception/RolesListMustBeInstancesOfMooseMetaRole.pm',
+    'Moose/Exception/SingleParamsToNewMustBeHashRef.pm',
+    'Moose/Exception/TriggerMustBeACodeRef.pm',
+    'Moose/Exception/TypeConstraintCannotBeUsedForAParameterizableType.pm',
+    'Moose/Exception/TypeConstraintIsAlreadyCreated.pm',
+    'Moose/Exception/TypeParameterMustBeMooseMetaType.pm',
+    'Moose/Exception/UnableToCanonicalizeHandles.pm',
+    'Moose/Exception/UnableToCanonicalizeNonRolePackage.pm',
+    'Moose/Exception/UnableToRecognizeDelegateMetaclass.pm',
+    'Moose/Exception/UndefinedHashKeysPassedToMethod.pm',
+    'Moose/Exception/UnionCalledWithAnArrayRefAndAdditionalArgs.pm',
+    'Moose/Exception/UnionTakesAtleastTwoTypeNames.pm',
+    'Moose/Exception/ValidationFailedForInlineTypeConstraint.pm',
+    'Moose/Exception/ValidationFailedForTypeConstraint.pm',
+    'Moose/Exception/WrapTakesACodeRefToBless.pm',
+    'Moose/Exception/WrongTypeConstraintGiven.pm',
+    'Moose/Exporter.pm',
+    'Moose/Meta/Attribute/Native/Trait.pm',
+    'Moose/Meta/Attribute/Native/Trait/Array.pm',
+    'Moose/Meta/Attribute/Native/Trait/Bool.pm',
+    'Moose/Meta/Attribute/Native/Trait/Code.pm',
+    'Moose/Meta/Attribute/Native/Trait/Counter.pm',
+    'Moose/Meta/Attribute/Native/Trait/Hash.pm',
+    'Moose/Meta/Attribute/Native/Trait/Number.pm',
+    'Moose/Meta/Attribute/Native/Trait/String.pm',
+    'Moose/Meta/Class.pm',
+    'Moose/Meta/Class/Immutable/Trait.pm',
+    'Moose/Meta/Instance.pm',
+    'Moose/Meta/Method.pm',
+    'Moose/Meta/Method/Accessor.pm',
+    'Moose/Meta/Method/Accessor/Native.pm',
+    'Moose/Meta/Method/Accessor/Native/Array.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/Writer.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/accessor.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/clear.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/count.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/delete.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/elements.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/first.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/first_index.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/get.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/grep.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/insert.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/is_empty.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/join.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/map.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/natatime.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/pop.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/push.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/reduce.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/set.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/shallow_clone.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/shift.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/shuffle.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/sort.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/sort_in_place.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/splice.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/uniq.pm',
+    'Moose/Meta/Method/Accessor/Native/Array/unshift.pm',
+    'Moose/Meta/Method/Accessor/Native/Bool/not.pm',
+    'Moose/Meta/Method/Accessor/Native/Bool/set.pm',
+    'Moose/Meta/Method/Accessor/Native/Bool/toggle.pm',
+    'Moose/Meta/Method/Accessor/Native/Bool/unset.pm',
+    'Moose/Meta/Method/Accessor/Native/Code/execute.pm',
+    'Moose/Meta/Method/Accessor/Native/Code/execute_method.pm',
+    'Moose/Meta/Method/Accessor/Native/Collection.pm',
+    'Moose/Meta/Method/Accessor/Native/Counter/Writer.pm',
+    'Moose/Meta/Method/Accessor/Native/Counter/dec.pm',
+    'Moose/Meta/Method/Accessor/Native/Counter/inc.pm',
+    'Moose/Meta/Method/Accessor/Native/Counter/reset.pm',
+    'Moose/Meta/Method/Accessor/Native/Counter/set.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/Writer.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/accessor.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/clear.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/count.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/defined.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/delete.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/elements.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/exists.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/get.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/is_empty.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/keys.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/kv.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/set.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/shallow_clone.pm',
+    'Moose/Meta/Method/Accessor/Native/Hash/values.pm',
+    'Moose/Meta/Method/Accessor/Native/Number/abs.pm',
+    'Moose/Meta/Method/Accessor/Native/Number/add.pm',
+    'Moose/Meta/Method/Accessor/Native/Number/div.pm',
+    'Moose/Meta/Method/Accessor/Native/Number/mod.pm',
+    'Moose/Meta/Method/Accessor/Native/Number/mul.pm',
+    'Moose/Meta/Method/Accessor/Native/Number/set.pm',
+    'Moose/Meta/Method/Accessor/Native/Number/sub.pm',
+    'Moose/Meta/Method/Accessor/Native/Reader.pm',
+    'Moose/Meta/Method/Accessor/Native/String/append.pm',
+    'Moose/Meta/Method/Accessor/Native/String/chomp.pm',
+    'Moose/Meta/Method/Accessor/Native/String/chop.pm',
+    'Moose/Meta/Method/Accessor/Native/String/clear.pm',
+    'Moose/Meta/Method/Accessor/Native/String/inc.pm',
+    'Moose/Meta/Method/Accessor/Native/String/length.pm',
+    'Moose/Meta/Method/Accessor/Native/String/match.pm',
+    'Moose/Meta/Method/Accessor/Native/String/prepend.pm',
+    'Moose/Meta/Method/Accessor/Native/String/replace.pm',
+    'Moose/Meta/Method/Accessor/Native/String/substr.pm',
+    'Moose/Meta/Method/Accessor/Native/Writer.pm',
+    'Moose/Meta/Method/Augmented.pm',
+    'Moose/Meta/Method/Constructor.pm',
+    'Moose/Meta/Method/Delegation.pm',
+    'Moose/Meta/Method/Destructor.pm',
+    'Moose/Meta/Method/Meta.pm',
+    'Moose/Meta/Method/Overridden.pm',
+    'Moose/Meta/Object/Trait.pm',
+    'Moose/Meta/Role.pm',
+    'Moose/Meta/Role/Application.pm',
+    'Moose/Meta/Role/Application/RoleSummation.pm',
+    'Moose/Meta/Role/Application/ToClass.pm',
+    'Moose/Meta/Role/Application/ToInstance.pm',
+    'Moose/Meta/Role/Application/ToRole.pm',
+    'Moose/Meta/Role/Composite.pm',
+    'Moose/Meta/Role/Method.pm',
+    'Moose/Meta/Role/Method/Conflicting.pm',
+    'Moose/Meta/Role/Method/Required.pm',
+    'Moose/Meta/TypeCoercion.pm',
+    'Moose/Meta/TypeCoercion/Union.pm',
+    'Moose/Meta/TypeConstraint.pm',
+    'Moose/Meta/TypeConstraint/Registry.pm',
+    'Moose/Object.pm',
+    'Moose/Role.pm',
+    'Moose/Util.pm',
+    'Moose/Util/MetaRole.pm',
+    'Moose/Util/TypeConstraints.pm',
+    'Moose/Util/TypeConstraints/Builtins.pm',
+    'Test/Moose.pm',
+    'metaclass.pm',
+    'oose.pm'
+);
+
+my @scripts = (
+    'bin/moose-outdated'
+);
+
+# no fake home requested
+
+my $inc_switch = -d 'blib' ? '-Mblib' : '-Ilib';
+
+use File::Spec;
+use IPC::Open3;
+use IO::Handle;
+
+open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!";
+
+my @warnings;
+for my $lib (@module_files)
+{
+    # see L<perlfaq8/How can I capture STDERR from an external command?>
+    my $stderr = IO::Handle->new;
+
+    my $pid = open3($stdin, '>&STDERR', $stderr, $^X, $inc_switch, '-e', "require q[$lib]");
+    binmode $stderr, ':crlf' if $^O eq 'MSWin32';
+    my @_warnings = <$stderr>;
+    waitpid($pid, 0);
+    is($?, 0, "$lib loaded ok");
+
+    if (@_warnings)
+    {
+        warn @_warnings;
+        push @warnings, @_warnings;
+    }
+}
+
+foreach my $file (@scripts)
+{ SKIP: {
+    open my $fh, '<', $file or warn("Unable to open $file: $!"), next;
+    my $line = <$fh>;
+
+    close $fh and skip("$file isn't perl", 1) unless $line =~ /^#!\s*(?:\S*perl\S*)((?:\s+-\w*)*)(?:\s*#.*)?$/;
+    my @flags = $1 ? split(' ', $1) : ();
+
+    my $stderr = IO::Handle->new;
+
+    my $pid = open3($stdin, '>&STDERR', $stderr, $^X, $inc_switch, @flags, '-c', $file);
+    binmode $stderr, ':crlf' if $^O eq 'MSWin32';
+    my @_warnings = <$stderr>;
+    waitpid($pid, 0);
+    is($?, 0, "$file compiled ok");
+
+   # in older perls, -c output is simply the file portion of the path being tested
+    if (@_warnings = grep { !/\bsyntax OK$/ }
+        grep { chomp; $_ ne (File::Spec->splitpath($file))[2] } @_warnings)
+    {
+        warn @_warnings;
+        push @warnings, @_warnings;
+    }
+} }
+
+
+
+is(scalar(@warnings), 0, 'no warnings found')
+    or diag 'got warnings: ', explain(\@warnings) if $ENV{AUTHOR_TESTING};
+
+BAIL_OUT("Compilation problems") if !Test::More->builder->is_passing;
@@ -1,10 +0,0 @@
-use strict;
-use warnings;
-
-use Test::More;
-use Moose ();
-
-# this is used in Moo::sification
-ok(defined $Moose::AUTHORITY, '$AUTHORITY is set in the main module');
-
-done_testing;
@@ -1,8 +1,6 @@
 #!perl
 # This file was automatically generated by Dist::Zilla::Plugin::MetaTests.
 
-use Test::More;
+use Test::CPAN::Meta;
 
-eval "use Test::CPAN::Meta";
-plan skip_all => "Test::CPAN::Meta required for testing META.yml" if $@;
 meta_yaml_ok();
@@ -1,8 +0,0 @@
-use strict;
-use warnings;
-use Test::More;
-
-eval 'use Test::EOL';
-plan skip_all => 'Test::EOL required' if $@;
-
-all_perl_files_ok({ trailing_whitespace => 1 });
@@ -1,4 +1,9 @@
-# this test was generated with Dist::Zilla::Plugin::Test::Kwalitee 2.07
+# this test was generated with Dist::Zilla::Plugin::Test::Kwalitee 2.11
 use strict;
 use warnings;
-use Test::Kwalitee;
+use Test::More 0.88;
+use Test::Kwalitee 1.21 'kwalitee_ok';
+
+kwalitee_ok( qw( -use_strict ) );
+
+done_testing;
@@ -1,442 +0,0 @@
-use strict;
-use warnings;
-
-# this test was generated with Dist::Zilla::Plugin::Test::NoTabs 0.06
-
-use Test::More 0.88;
-use Test::NoTabs;
-
-my @files = (
-    'bin/moose-outdated',
-    'lib/Class/MOP.pm',
-    'lib/Class/MOP/Attribute.pm',
-    'lib/Class/MOP/Class.pm',
-    'lib/Class/MOP/Class/Immutable/Trait.pm',
-    'lib/Class/MOP/Deprecated.pm',
-    'lib/Class/MOP/Instance.pm',
-    'lib/Class/MOP/Method.pm',
-    'lib/Class/MOP/Method/Accessor.pm',
-    'lib/Class/MOP/Method/Constructor.pm',
-    'lib/Class/MOP/Method/Generated.pm',
-    'lib/Class/MOP/Method/Inlined.pm',
-    'lib/Class/MOP/Method/Meta.pm',
-    'lib/Class/MOP/Method/Overload.pm',
-    'lib/Class/MOP/Method/Wrapped.pm',
-    'lib/Class/MOP/MiniTrait.pm',
-    'lib/Class/MOP/Mixin.pm',
-    'lib/Class/MOP/Mixin/AttributeCore.pm',
-    'lib/Class/MOP/Mixin/HasAttributes.pm',
-    'lib/Class/MOP/Mixin/HasMethods.pm',
-    'lib/Class/MOP/Module.pm',
-    'lib/Class/MOP/Object.pm',
-    'lib/Class/MOP/Package.pm',
-    'lib/Moose.pm',
-    'lib/Moose/Conflicts.pm',
-    'lib/Moose/Cookbook.pod',
-    'lib/Moose/Cookbook/Basics/BankAccount_MethodModifiersAndSubclassing.pod',
-    'lib/Moose/Cookbook/Basics/BinaryTree_AttributeFeatures.pod',
-    'lib/Moose/Cookbook/Basics/BinaryTree_BuilderAndLazyBuild.pod',
-    'lib/Moose/Cookbook/Basics/Company_Subtypes.pod',
-    'lib/Moose/Cookbook/Basics/DateTime_ExtendingNonMooseParent.pod',
-    'lib/Moose/Cookbook/Basics/Document_AugmentAndInner.pod',
-    'lib/Moose/Cookbook/Basics/Genome_OverloadingSubtypesAndCoercion.pod',
-    'lib/Moose/Cookbook/Basics/HTTP_SubtypesAndCoercion.pod',
-    'lib/Moose/Cookbook/Basics/Immutable.pod',
-    'lib/Moose/Cookbook/Basics/Person_BUILDARGSAndBUILD.pod',
-    'lib/Moose/Cookbook/Basics/Point_AttributesAndSubclassing.pod',
-    'lib/Moose/Cookbook/Extending/Debugging_BaseClassRole.pod',
-    'lib/Moose/Cookbook/Extending/ExtensionOverview.pod',
-    'lib/Moose/Cookbook/Extending/Mooseish_MooseSugar.pod',
-    'lib/Moose/Cookbook/Legacy/Debugging_BaseClassReplacement.pod',
-    'lib/Moose/Cookbook/Legacy/Labeled_AttributeMetaclass.pod',
-    'lib/Moose/Cookbook/Legacy/Table_ClassMetaclass.pod',
-    'lib/Moose/Cookbook/Meta/GlobRef_InstanceMetaclass.pod',
-    'lib/Moose/Cookbook/Meta/Labeled_AttributeTrait.pod',
-    'lib/Moose/Cookbook/Meta/PrivateOrPublic_MethodMetaclass.pod',
-    'lib/Moose/Cookbook/Meta/Table_MetaclassTrait.pod',
-    'lib/Moose/Cookbook/Meta/WhyMeta.pod',
-    'lib/Moose/Cookbook/Roles/ApplicationToInstance.pod',
-    'lib/Moose/Cookbook/Roles/Comparable_CodeReuse.pod',
-    'lib/Moose/Cookbook/Roles/Restartable_AdvancedComposition.pod',
-    'lib/Moose/Cookbook/Snack/Keywords.pod',
-    'lib/Moose/Cookbook/Snack/Types.pod',
-    'lib/Moose/Cookbook/Style.pod',
-    'lib/Moose/Deprecated.pm',
-    'lib/Moose/Exception.pm',
-    'lib/Moose/Exception/AccessorMustReadWrite.pm',
-    'lib/Moose/Exception/AddParameterizableTypeTakesParameterizableType.pm',
-    'lib/Moose/Exception/AddRoleTakesAMooseMetaRoleInstance.pm',
-    'lib/Moose/Exception/AddRoleToARoleTakesAMooseMetaRole.pm',
-    'lib/Moose/Exception/ApplyTakesABlessedInstance.pm',
-    'lib/Moose/Exception/AttachToClassNeedsAClassMOPClassInstanceOrASubclass.pm',
-    'lib/Moose/Exception/AttributeConflictInRoles.pm',
-    'lib/Moose/Exception/AttributeConflictInSummation.pm',
-    'lib/Moose/Exception/AttributeExtensionIsNotSupportedInRoles.pm',
-    'lib/Moose/Exception/AttributeIsRequired.pm',
-    'lib/Moose/Exception/AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass.pm',
-    'lib/Moose/Exception/AttributeNamesDoNotMatch.pm',
-    'lib/Moose/Exception/AttributeValueIsNotAnObject.pm',
-    'lib/Moose/Exception/AttributeValueIsNotDefined.pm',
-    'lib/Moose/Exception/AutoDeRefNeedsArrayRefOrHashRef.pm',
-    'lib/Moose/Exception/BadOptionFormat.pm',
-    'lib/Moose/Exception/BothBuilderAndDefaultAreNotAllowed.pm',
-    'lib/Moose/Exception/BuilderDoesNotExist.pm',
-    'lib/Moose/Exception/BuilderMethodNotSupportedForAttribute.pm',
-    'lib/Moose/Exception/BuilderMethodNotSupportedForInlineAttribute.pm',
-    'lib/Moose/Exception/BuilderMustBeAMethodName.pm',
-    'lib/Moose/Exception/CallingMethodOnAnImmutableInstance.pm',
-    'lib/Moose/Exception/CallingReadOnlyMethodOnAnImmutableInstance.pm',
-    'lib/Moose/Exception/CanExtendOnlyClasses.pm',
-    'lib/Moose/Exception/CanOnlyConsumeRole.pm',
-    'lib/Moose/Exception/CanOnlyWrapBlessedCode.pm',
-    'lib/Moose/Exception/CanReblessOnlyIntoASubclass.pm',
-    'lib/Moose/Exception/CanReblessOnlyIntoASuperclass.pm',
-    'lib/Moose/Exception/CannotAddAdditionalTypeCoercionsToUnion.pm',
-    'lib/Moose/Exception/CannotAddAsAnAttributeToARole.pm',
-    'lib/Moose/Exception/CannotApplyBaseClassRolesToRole.pm',
-    'lib/Moose/Exception/CannotAssignValueToReadOnlyAccessor.pm',
-    'lib/Moose/Exception/CannotAugmentIfLocalMethodPresent.pm',
-    'lib/Moose/Exception/CannotAugmentNoSuperMethod.pm',
-    'lib/Moose/Exception/CannotAutoDerefWithoutIsa.pm',
-    'lib/Moose/Exception/CannotAutoDereferenceTypeConstraint.pm',
-    'lib/Moose/Exception/CannotCalculateNativeType.pm',
-    'lib/Moose/Exception/CannotCallAnAbstractBaseMethod.pm',
-    'lib/Moose/Exception/CannotCallAnAbstractMethod.pm',
-    'lib/Moose/Exception/CannotCoerceAWeakRef.pm',
-    'lib/Moose/Exception/CannotCoerceAttributeWhichHasNoCoercion.pm',
-    'lib/Moose/Exception/CannotCreateHigherOrderTypeWithoutATypeParameter.pm',
-    'lib/Moose/Exception/CannotCreateMethodAliasLocalMethodIsPresent.pm',
-    'lib/Moose/Exception/CannotCreateMethodAliasLocalMethodIsPresentInClass.pm',
-    'lib/Moose/Exception/CannotDelegateLocalMethodIsPresent.pm',
-    'lib/Moose/Exception/CannotDelegateWithoutIsa.pm',
-    'lib/Moose/Exception/CannotFindDelegateMetaclass.pm',
-    'lib/Moose/Exception/CannotFindType.pm',
-    'lib/Moose/Exception/CannotFindTypeGivenToMatchOnType.pm',
-    'lib/Moose/Exception/CannotFixMetaclassCompatibility.pm',
-    'lib/Moose/Exception/CannotGenerateInlineConstraint.pm',
-    'lib/Moose/Exception/CannotInitializeMooseMetaRoleComposite.pm',
-    'lib/Moose/Exception/CannotInlineTypeConstraintCheck.pm',
-    'lib/Moose/Exception/CannotLocatePackageInINC.pm',
-    'lib/Moose/Exception/CannotMakeMetaclassCompatible.pm',
-    'lib/Moose/Exception/CannotOverrideALocalMethod.pm',
-    'lib/Moose/Exception/CannotOverrideBodyOfMetaMethods.pm',
-    'lib/Moose/Exception/CannotOverrideLocalMethodIsPresent.pm',
-    'lib/Moose/Exception/CannotOverrideNoSuperMethod.pm',
-    'lib/Moose/Exception/CannotRegisterUnnamedTypeConstraint.pm',
-    'lib/Moose/Exception/CannotUseLazyBuildAndDefaultSimultaneously.pm',
-    'lib/Moose/Exception/CircularReferenceInAlso.pm',
-    'lib/Moose/Exception/ClassDoesNotHaveInitMeta.pm',
-    'lib/Moose/Exception/ClassDoesTheExcludedRole.pm',
-    'lib/Moose/Exception/ClassNamesDoNotMatch.pm',
-    'lib/Moose/Exception/CloneObjectExpectsAnInstanceOfMetaclass.pm',
-    'lib/Moose/Exception/CodeBlockMustBeACodeRef.pm',
-    'lib/Moose/Exception/CoercingWithoutCoercions.pm',
-    'lib/Moose/Exception/CoercionAlreadyExists.pm',
-    'lib/Moose/Exception/CoercionNeedsTypeConstraint.pm',
-    'lib/Moose/Exception/ConflictDetectedInCheckRoleExclusions.pm',
-    'lib/Moose/Exception/ConflictDetectedInCheckRoleExclusionsInToClass.pm',
-    'lib/Moose/Exception/ConstructClassInstanceTakesPackageName.pm',
-    'lib/Moose/Exception/CouldNotCreateMethod.pm',
-    'lib/Moose/Exception/CouldNotCreateWriter.pm',
-    'lib/Moose/Exception/CouldNotEvalConstructor.pm',
-    'lib/Moose/Exception/CouldNotEvalDestructor.pm',
-    'lib/Moose/Exception/CouldNotFindTypeConstraintToCoerceFrom.pm',
-    'lib/Moose/Exception/CouldNotGenerateInlineAttributeMethod.pm',
-    'lib/Moose/Exception/CouldNotLocateTypeConstraintForUnion.pm',
-    'lib/Moose/Exception/CouldNotParseType.pm',
-    'lib/Moose/Exception/CreateMOPClassTakesArrayRefOfAttributes.pm',
-    'lib/Moose/Exception/CreateMOPClassTakesArrayRefOfSuperclasses.pm',
-    'lib/Moose/Exception/CreateMOPClassTakesHashRefOfMethods.pm',
-    'lib/Moose/Exception/CreateTakesArrayRefOfRoles.pm',
-    'lib/Moose/Exception/CreateTakesHashRefOfAttributes.pm',
-    'lib/Moose/Exception/CreateTakesHashRefOfMethods.pm',
-    'lib/Moose/Exception/DefaultToMatchOnTypeMustBeCodeRef.pm',
-    'lib/Moose/Exception/DelegationToAClassWhichIsNotLoaded.pm',
-    'lib/Moose/Exception/DelegationToARoleWhichIsNotLoaded.pm',
-    'lib/Moose/Exception/DelegationToATypeWhichIsNotAClass.pm',
-    'lib/Moose/Exception/DoesRequiresRoleName.pm',
-    'lib/Moose/Exception/EnumCalledWithAnArrayRefAndAdditionalArgs.pm',
-    'lib/Moose/Exception/EnumValuesMustBeString.pm',
-    'lib/Moose/Exception/ExtendsMissingArgs.pm',
-    'lib/Moose/Exception/HandlesMustBeAHashRef.pm',
-    'lib/Moose/Exception/IllegalInheritedOptions.pm',
-    'lib/Moose/Exception/IllegalMethodTypeToAddMethodModifier.pm',
-    'lib/Moose/Exception/IncompatibleMetaclassOfSuperclass.pm',
-    'lib/Moose/Exception/InitMetaRequiresClass.pm',
-    'lib/Moose/Exception/InitializeTakesUnBlessedPackageName.pm',
-    'lib/Moose/Exception/InstanceBlessedIntoWrongClass.pm',
-    'lib/Moose/Exception/InstanceMustBeABlessedReference.pm',
-    'lib/Moose/Exception/InvalidArgPassedToMooseUtilMetaRole.pm',
-    'lib/Moose/Exception/InvalidArgumentToMethod.pm',
-    'lib/Moose/Exception/InvalidArgumentsToTraitAliases.pm',
-    'lib/Moose/Exception/InvalidBaseTypeGivenToCreateParameterizedTypeConstraint.pm',
-    'lib/Moose/Exception/InvalidHandleValue.pm',
-    'lib/Moose/Exception/InvalidHasProvidedInARole.pm',
-    'lib/Moose/Exception/InvalidNameForType.pm',
-    'lib/Moose/Exception/InvalidRoleApplication.pm',
-    'lib/Moose/Exception/InvalidTypeConstraint.pm',
-    'lib/Moose/Exception/InvalidTypeGivenToCreateParameterizedTypeConstraint.pm',
-    'lib/Moose/Exception/InvalidValueForIs.pm',
-    'lib/Moose/Exception/IsaDoesNotDoTheRole.pm',
-    'lib/Moose/Exception/IsaLacksDoesMethod.pm',
-    'lib/Moose/Exception/LazyAttributeNeedsADefault.pm',
-    'lib/Moose/Exception/Legacy.pm',
-    'lib/Moose/Exception/MOPAttributeNewNeedsAttributeName.pm',
-    'lib/Moose/Exception/MatchActionMustBeACodeRef.pm',
-    'lib/Moose/Exception/MessageParameterMustBeCodeRef.pm',
-    'lib/Moose/Exception/MetaclassIsAClassNotASubclassOfGivenMetaclass.pm',
-    'lib/Moose/Exception/MetaclassIsARoleNotASubclassOfGivenMetaclass.pm',
-    'lib/Moose/Exception/MetaclassIsNotASubclassOfGivenMetaclass.pm',
-    'lib/Moose/Exception/MetaclassMustBeASubclassOfMooseMetaClass.pm',
-    'lib/Moose/Exception/MetaclassMustBeASubclassOfMooseMetaRole.pm',
-    'lib/Moose/Exception/MetaclassMustBeDerivedFromClassMOPClass.pm',
-    'lib/Moose/Exception/MetaclassNotLoaded.pm',
-    'lib/Moose/Exception/MetaclassTypeIncompatible.pm',
-    'lib/Moose/Exception/MethodExpectedAMetaclassObject.pm',
-    'lib/Moose/Exception/MethodExpectsFewerArgs.pm',
-    'lib/Moose/Exception/MethodExpectsMoreArgs.pm',
-    'lib/Moose/Exception/MethodModifierNeedsMethodName.pm',
-    'lib/Moose/Exception/MethodNameConflictInRoles.pm',
-    'lib/Moose/Exception/MethodNameNotFoundInInheritanceHierarchy.pm',
-    'lib/Moose/Exception/MethodNameNotGiven.pm',
-    'lib/Moose/Exception/MustDefineAMethodName.pm',
-    'lib/Moose/Exception/MustDefineAnAttributeName.pm',
-    'lib/Moose/Exception/MustHaveAtLeastOneValueToEnumerate.pm',
-    'lib/Moose/Exception/MustPassAHashOfOptions.pm',
-    'lib/Moose/Exception/MustPassAMooseMetaRoleInstanceOrSubclass.pm',
-    'lib/Moose/Exception/MustPassAPackageNameOrAnExistingClassMOPPackageInstance.pm',
-    'lib/Moose/Exception/MustPassEvenNumberOfArguments.pm',
-    'lib/Moose/Exception/MustPassEvenNumberOfAttributeOptions.pm',
-    'lib/Moose/Exception/MustProvideANameForTheAttribute.pm',
-    'lib/Moose/Exception/MustSpecifyAtleastOneMethod.pm',
-    'lib/Moose/Exception/MustSpecifyAtleastOneRole.pm',
-    'lib/Moose/Exception/MustSpecifyAtleastOneRoleToApplicant.pm',
-    'lib/Moose/Exception/MustSupplyAClassMOPAttributeInstance.pm',
-    'lib/Moose/Exception/MustSupplyADelegateToMethod.pm',
-    'lib/Moose/Exception/MustSupplyAMetaclass.pm',
-    'lib/Moose/Exception/MustSupplyAMooseMetaAttributeInstance.pm',
-    'lib/Moose/Exception/MustSupplyAnAccessorTypeToConstructWith.pm',
-    'lib/Moose/Exception/MustSupplyAnAttributeToConstructWith.pm',
-    'lib/Moose/Exception/MustSupplyArrayRefAsCurriedArguments.pm',
-    'lib/Moose/Exception/MustSupplyPackageNameAndName.pm',
-    'lib/Moose/Exception/NeedsTypeConstraintUnionForTypeCoercionUnion.pm',
-    'lib/Moose/Exception/NeitherAttributeNorAttributeNameIsGiven.pm',
-    'lib/Moose/Exception/NeitherClassNorClassNameIsGiven.pm',
-    'lib/Moose/Exception/NeitherRoleNorRoleNameIsGiven.pm',
-    'lib/Moose/Exception/NeitherTypeNorTypeNameIsGiven.pm',
-    'lib/Moose/Exception/NoAttributeFoundInSuperClass.pm',
-    'lib/Moose/Exception/NoBodyToInitializeInAnAbstractBaseClass.pm',
-    'lib/Moose/Exception/NoCasesMatched.pm',
-    'lib/Moose/Exception/NoConstraintCheckForTypeConstraint.pm',
-    'lib/Moose/Exception/NoDestructorClassSpecified.pm',
-    'lib/Moose/Exception/NoImmutableTraitSpecifiedForClass.pm',
-    'lib/Moose/Exception/NoParentGivenToSubtype.pm',
-    'lib/Moose/Exception/OnlyInstancesCanBeCloned.pm',
-    'lib/Moose/Exception/OperatorIsRequired.pm',
-    'lib/Moose/Exception/OverrideConflictInComposition.pm',
-    'lib/Moose/Exception/OverrideConflictInSummation.pm',
-    'lib/Moose/Exception/PackageDoesNotUseMooseExporter.pm',
-    'lib/Moose/Exception/PackageNameAndNameParamsNotGivenToWrap.pm',
-    'lib/Moose/Exception/PackagesAndModulesAreNotCachable.pm',
-    'lib/Moose/Exception/ParameterIsNotSubtypeOfParent.pm',
-    'lib/Moose/Exception/ReferencesAreNotAllowedAsDefault.pm',
-    'lib/Moose/Exception/RequiredAttributeLacksInitialization.pm',
-    'lib/Moose/Exception/RequiredAttributeNeedsADefault.pm',
-    'lib/Moose/Exception/RequiredMethodsImportedByClass.pm',
-    'lib/Moose/Exception/RequiredMethodsNotImplementedByClass.pm',
-    'lib/Moose/Exception/Role/Attribute.pm',
-    'lib/Moose/Exception/Role/AttributeName.pm',
-    'lib/Moose/Exception/Role/Class.pm',
-    'lib/Moose/Exception/Role/EitherAttributeOrAttributeName.pm',
-    'lib/Moose/Exception/Role/Instance.pm',
-    'lib/Moose/Exception/Role/InvalidAttributeOptions.pm',
-    'lib/Moose/Exception/Role/Method.pm',
-    'lib/Moose/Exception/Role/ParamsHash.pm',
-    'lib/Moose/Exception/Role/Role.pm',
-    'lib/Moose/Exception/Role/RoleForCreate.pm',
-    'lib/Moose/Exception/Role/RoleForCreateMOPClass.pm',
-    'lib/Moose/Exception/Role/TypeConstraint.pm',
-    'lib/Moose/Exception/RoleDoesTheExcludedRole.pm',
-    'lib/Moose/Exception/RoleExclusionConflict.pm',
-    'lib/Moose/Exception/RoleNameRequired.pm',
-    'lib/Moose/Exception/RoleNameRequiredForMooseMetaRole.pm',
-    'lib/Moose/Exception/RoleNamesDoNotMatch.pm',
-    'lib/Moose/Exception/RolesDoNotSupportAugment.pm',
-    'lib/Moose/Exception/RolesDoNotSupportExtends.pm',
-    'lib/Moose/Exception/RolesDoNotSupportInner.pm',
-    'lib/Moose/Exception/RolesDoNotSupportRegexReferencesForMethodModifiers.pm',
-    'lib/Moose/Exception/RolesInCreateTakesAnArrayRef.pm',
-    'lib/Moose/Exception/RolesListMustBeInstancesOfMooseMetaRole.pm',
-    'lib/Moose/Exception/SingleParamsToNewMustBeHashRef.pm',
-    'lib/Moose/Exception/TriggerMustBeACodeRef.pm',
-    'lib/Moose/Exception/TypeConstraintCannotBeUsedForAParameterizableType.pm',
-    'lib/Moose/Exception/TypeConstraintIsAlreadyCreated.pm',
-    'lib/Moose/Exception/TypeNamesDoNotMatch.pm',
-    'lib/Moose/Exception/TypeParameterMustBeMooseMetaType.pm',
-    'lib/Moose/Exception/UnableToCanonicalizeHandles.pm',
-    'lib/Moose/Exception/UnableToCanonicalizeNonRolePackage.pm',
-    'lib/Moose/Exception/UnableToRecognizeDelegateMetaclass.pm',
-    'lib/Moose/Exception/UndefinedHashKeysPassedToMethod.pm',
-    'lib/Moose/Exception/UnionCalledWithAnArrayRefAndAdditionalArgs.pm',
-    'lib/Moose/Exception/UnionTakesAtleastTwoTypeNames.pm',
-    'lib/Moose/Exception/ValidationFailedForInlineTypeConstraint.pm',
-    'lib/Moose/Exception/ValidationFailedForTypeConstraint.pm',
-    'lib/Moose/Exception/WrapTakesACodeRefToBless.pm',
-    'lib/Moose/Exception/WrongTypeConstraintGiven.pm',
-    'lib/Moose/Exporter.pm',
-    'lib/Moose/Intro.pod',
-    'lib/Moose/Manual.pod',
-    'lib/Moose/Manual/Attributes.pod',
-    'lib/Moose/Manual/BestPractices.pod',
-    'lib/Moose/Manual/Classes.pod',
-    'lib/Moose/Manual/Concepts.pod',
-    'lib/Moose/Manual/Construction.pod',
-    'lib/Moose/Manual/Contributing.pod',
-    'lib/Moose/Manual/Delegation.pod',
-    'lib/Moose/Manual/Delta.pod',
-    'lib/Moose/Manual/Exceptions.pod',
-    'lib/Moose/Manual/Exceptions/Manifest.pod',
-    'lib/Moose/Manual/FAQ.pod',
-    'lib/Moose/Manual/MOP.pod',
-    'lib/Moose/Manual/MethodModifiers.pod',
-    'lib/Moose/Manual/MooseX.pod',
-    'lib/Moose/Manual/Roles.pod',
-    'lib/Moose/Manual/Support.pod',
-    'lib/Moose/Manual/Types.pod',
-    'lib/Moose/Manual/Unsweetened.pod',
-    'lib/Moose/Meta/Attribute.pm',
-    'lib/Moose/Meta/Attribute/Native.pm',
-    'lib/Moose/Meta/Attribute/Native/Trait.pm',
-    'lib/Moose/Meta/Attribute/Native/Trait/Array.pm',
-    'lib/Moose/Meta/Attribute/Native/Trait/Bool.pm',
-    'lib/Moose/Meta/Attribute/Native/Trait/Code.pm',
-    'lib/Moose/Meta/Attribute/Native/Trait/Counter.pm',
-    'lib/Moose/Meta/Attribute/Native/Trait/Hash.pm',
-    'lib/Moose/Meta/Attribute/Native/Trait/Number.pm',
-    'lib/Moose/Meta/Attribute/Native/Trait/String.pm',
-    'lib/Moose/Meta/Class.pm',
-    'lib/Moose/Meta/Class/Immutable/Trait.pm',
-    'lib/Moose/Meta/Instance.pm',
-    'lib/Moose/Meta/Method.pm',
-    'lib/Moose/Meta/Method/Accessor.pm',
-    'lib/Moose/Meta/Method/Accessor/Native.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/Writer.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/accessor.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/clear.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/count.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/delete.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/elements.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/first.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/first_index.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/get.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/grep.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/insert.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/is_empty.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/join.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/map.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/natatime.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/pop.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/push.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/reduce.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/set.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/shallow_clone.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/shift.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/shuffle.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/sort.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/sort_in_place.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/splice.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/uniq.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Array/unshift.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Bool/not.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Bool/set.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Bool/toggle.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Bool/unset.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Code/execute.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Code/execute_method.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Collection.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Counter/Writer.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Counter/dec.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Counter/inc.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Counter/reset.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Counter/set.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/Writer.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/accessor.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/clear.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/count.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/defined.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/delete.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/elements.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/exists.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/get.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/is_empty.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/keys.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/kv.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/set.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/shallow_clone.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Hash/values.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Number/abs.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Number/add.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Number/div.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Number/mod.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Number/mul.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Number/set.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Number/sub.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Reader.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/String/append.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/String/chomp.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/String/chop.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/String/clear.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/String/inc.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/String/length.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/String/match.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/String/prepend.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/String/replace.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/String/substr.pm',
-    'lib/Moose/Meta/Method/Accessor/Native/Writer.pm',
-    'lib/Moose/Meta/Method/Augmented.pm',
-    'lib/Moose/Meta/Method/Constructor.pm',
-    'lib/Moose/Meta/Method/Delegation.pm',
-    'lib/Moose/Meta/Method/Destructor.pm',
-    'lib/Moose/Meta/Method/Meta.pm',
-    'lib/Moose/Meta/Method/Overridden.pm',
-    'lib/Moose/Meta/Mixin/AttributeCore.pm',
-    'lib/Moose/Meta/Object/Trait.pm',
-    'lib/Moose/Meta/Role.pm',
-    'lib/Moose/Meta/Role/Application.pm',
-    'lib/Moose/Meta/Role/Application/RoleSummation.pm',
-    'lib/Moose/Meta/Role/Application/ToClass.pm',
-    'lib/Moose/Meta/Role/Application/ToInstance.pm',
-    'lib/Moose/Meta/Role/Application/ToRole.pm',
-    'lib/Moose/Meta/Role/Attribute.pm',
-    'lib/Moose/Meta/Role/Composite.pm',
-    'lib/Moose/Meta/Role/Method.pm',
-    'lib/Moose/Meta/Role/Method/Conflicting.pm',
-    'lib/Moose/Meta/Role/Method/Required.pm',
-    'lib/Moose/Meta/TypeCoercion.pm',
-    'lib/Moose/Meta/TypeCoercion/Union.pm',
-    'lib/Moose/Meta/TypeConstraint.pm',
-    'lib/Moose/Meta/TypeConstraint/Class.pm',
-    'lib/Moose/Meta/TypeConstraint/DuckType.pm',
-    'lib/Moose/Meta/TypeConstraint/Enum.pm',
-    'lib/Moose/Meta/TypeConstraint/Parameterizable.pm',
-    'lib/Moose/Meta/TypeConstraint/Parameterized.pm',
-    'lib/Moose/Meta/TypeConstraint/Registry.pm',
-    'lib/Moose/Meta/TypeConstraint/Role.pm',
-    'lib/Moose/Meta/TypeConstraint/Union.pm',
-    'lib/Moose/Object.pm',
-    'lib/Moose/Role.pm',
-    'lib/Moose/Spec/Role.pod',
-    'lib/Moose/Unsweetened.pod',
-    'lib/Moose/Util.pm',
-    'lib/Moose/Util/MetaRole.pm',
-    'lib/Moose/Util/TypeConstraints.pm',
-    'lib/Moose/Util/TypeConstraints/Builtins.pm',
-    'lib/Test/Moose.pm',
-    'lib/metaclass.pm',
-    'lib/oose.pm'
-);
-
-notabs_ok($_) foreach @files;
-done_testing;
@@ -1,220 +0,0 @@
-
-use strict;
-use warnings;
-
-use Test::More;
-
-use Test::Requires {
-    'Test::Pod::Coverage' => '1.04',    # skip all if not installed
-};
-
-# This is a stripped down version of all_pod_coverage_ok which lets us
-# vary the trustme parameter per module.
-my @modules
-    = grep { !/Accessor::Native.*$/ && !/::Conflicts$/ && !/^Moose::Exception::/ } all_modules();
-plan tests => scalar @modules;
-
-my %trustme = (
-    'Moose::Exception' => [ "BUILD" ],
-    'Class::MOP' => [
-        'DEBUG_NO_META',
-        'HAVE_ISAREV',
-        'IS_RUNNING_ON_5_10',
-        'subname',
-        'in_global_destruction',
-        'check_package_cache_flag',
-        'load_first_existing_class',
-        'is_class_loaded',
-        'load_class',
-    ],
-    'Class::MOP::Attribute' => ['process_accessors'],
-    'Class::MOP::Class'     => [
-        # deprecated
-        'alias_method',
-        'compute_all_applicable_attributes',
-        'compute_all_applicable_methods',
-
-        # unfinished feature
-        'add_dependent_meta_instance',
-        'add_meta_instance_dependencies',
-        'invalidate_meta_instance',
-        'invalidate_meta_instances',
-        'remove_dependent_meta_instance',
-        'remove_meta_instance_dependencies',
-        'update_meta_instance_dependencies',
-
-        # effectively internal
-        'check_metaclass_compatibility',
-        'clone_instance',
-        'construct_class_instance',
-        'construct_instance',
-        'create_meta_instance',
-        'reset_package_cache_flag',
-        'update_package_cache_flag',
-        'reinitialize',
-
-        # doc'd with rebless_instance
-        'rebless_instance_away',
-
-        # deprecated
-        'get_attribute_map',
-    ],
-    'Class::MOP::Class::Immutable::Trait'             => ['.+'],
-    'Class::MOP::Class::Immutable::Class::MOP::Class' => ['.+'],
-    'Class::MOP::Deprecated'                          => ['.+'],
-    'Class::MOP::Instance'                            => [
-        qw( BUILDARGS
-            bless_instance_structure
-            is_dependent_on_superclasses ),
-    ],
-    'Class::MOP::Instance' => [
-        qw( BUILDARGS
-            bless_instance_structure
-            is_dependent_on_superclasses ),
-    ],
-    'Class::MOP::Method::Accessor' => [
-        qw( generate_accessor_method
-            generate_accessor_method_inline
-            generate_clearer_method
-            generate_clearer_method_inline
-            generate_predicate_method
-            generate_predicate_method_inline
-            generate_reader_method
-            generate_reader_method_inline
-            generate_writer_method
-            generate_writer_method_inline
-            initialize_body
-            )
-    ],
-    'Class::MOP::Method::Constructor' => [
-        qw( attributes
-            generate_constructor_method
-            generate_constructor_method_inline
-            initialize_body
-            meta_instance
-            options
-            )
-    ],
-    'Class::MOP::Method::Generated' => [
-        qw( new
-            definition_context
-            is_inline
-            initialize_body
-            )
-    ],
-    'Class::MOP::MiniTrait'            => ['.+'],
-    'Class::MOP::Mixin::AttributeCore' => ['.+'],
-    'Class::MOP::Mixin::HasAttributes' => ['.+'],
-    'Class::MOP::Mixin::HasMethods'    => ['.+'],
-    'Class::MOP::Package'    => [ 'get_method_map', 'wrap_method_body' ],
-    'Moose' => ['init_meta', 'throw_error'],
-    'Moose::Error::Confess'  => ['new'],
-    'Moose::Error::Util' => ['.+'],
-    'Moose::Meta::Attribute' => [
-        qw( interpolate_class
-            throw_error
-            attach_to_class
-            )
-    ],
-    'Moose::Meta::Attribute::Native::MethodProvider::Array'   => ['.+'],
-    'Moose::Meta::Attribute::Native::MethodProvider::Bool'    => ['.+'],
-    'Moose::Meta::Attribute::Native::MethodProvider::Code'    => ['.+'],
-    'Moose::Meta::Attribute::Native::MethodProvider::Counter' => ['.+'],
-    'Moose::Meta::Attribute::Native::MethodProvider::Hash'    => ['.+'],
-    'Moose::Meta::Attribute::Native::MethodProvider::String'  => ['.+'],
-    'Moose::Meta::Class'                                      => [
-        qw( check_metaclass_compatibility
-            construct_instance
-            create_error
-            raise_error
-            reinitialize
-            superclasses
-            )
-    ],
-    'Moose::Meta::Class::Immutable::Trait' => ['.+'],
-    'Moose::Meta::Method'                  => ['throw_error'],
-    'Moose::Meta::Method::Accessor'        => [
-        qw( generate_accessor_method
-            generate_accessor_method_inline
-            generate_clearer_method
-            generate_predicate_method
-            generate_reader_method
-            generate_reader_method_inline
-            generate_writer_method
-            generate_writer_method_inline
-            new
-            )
-    ],
-    'Moose::Meta::Method::Constructor' => [
-        qw( attributes
-            initialize_body
-            meta_instance
-            new
-            options
-            )
-    ],
-    'Moose::Meta::Method::Destructor' => [ 'initialize_body', 'options' ],
-    'Moose::Meta::Method::Meta'       => ['wrap'],
-    'Moose::Meta::Role'               => [
-        qw( alias_method
-            get_method_modifier_list
-            reinitialize
-            reset_package_cache_flag
-            update_package_cache_flag
-            wrap_method_body
-            )
-    ],
-    'Moose::Meta::Mixin::AttributeCore' => ['.+'],
-    'Moose::Meta::Role::Composite' =>
-        [ 'get_method', 'get_method_list', 'has_method', 'add_method' ],
-    'Moose::Object' => ['BUILDALL', 'DEMOLISHALL'],
-    'Moose::Role' => [
-        qw( after
-            around
-            augment
-            before
-            extends
-            has
-            inner
-            override
-            super
-            with
-            init_meta )
-    ],
-    'Moose::Meta::TypeCoercion'        => ['compile_type_coercion'],
-    'Moose::Meta::TypeCoercion::Union' => ['compile_type_coercion'],
-    'Moose::Meta::TypeConstraint' => [qw( compile_type_constraint inlined )],
-    'Moose::Meta::TypeConstraint::Class' =>
-        [qw( equals is_a_type_of is_a_subtype_of )],
-    'Moose::Meta::TypeConstraint::Enum' => [qw( constraint equals )],
-    'Moose::Meta::TypeConstraint::DuckType' =>
-        [qw( constraint equals get_message )],
-    'Moose::Meta::TypeConstraint::Parameterizable' => ['.+'],
-    'Moose::Meta::TypeConstraint::Parameterized'   => ['.+'],
-    'Moose::Meta::TypeConstraint::Role' => [qw( equals is_a_type_of )],
-    'Moose::Meta::TypeConstraint::Union' => [
-        qw( compile_type_constraint
-            coercion
-            has_coercion
-            can_be_inlined
-            inline_environment )
-    ],
-    'Moose::Util'                  => ['add_method_modifier'],
-    'Moose::Util::MetaRole'        => ['apply_metaclass_roles'],
-    'Moose::Util::TypeConstraints' => ['find_or_create_type_constraint'],
-    'Moose::Util::TypeConstraints::Builtins' => ['.+'],
-);
-
-for my $module ( sort @modules ) {
-
-    my $trustme = [];
-    if ( $trustme{$module} ) {
-        my $methods = join '|', @{ $trustme{$module} };
-        $trustme = [qr/^(?:$methods)$/];
-    }
-
-    pod_coverage_ok(
-        $module, { trustme => $trustme },
-        "Pod coverage for $module"
-    );
-}
@@ -1,346 +0,0 @@
-use strict;
-use warnings;
-
-use Test::Spelling;
-
-my @stopwords;
-for (<DATA>) {
-    chomp;
-    push @stopwords, $_
-        unless /\A (?: \# | \s* \z)/msx;    # skip comments, whitespace
-}
-
-add_stopwords(@stopwords);
-local $ENV{LC_ALL} = 'C';
-set_spell_cmd('aspell list -l en');
-all_pod_files_spelling_ok;
-
-__DATA__
-## personal names
-Aankhen
-Anders
-Aran
-Buels
-Clary
-Debolaz
-Deltac
-Etheridge
-Florian
-Goro
-Goulah
-Hardison
-Kinyon
-Kinyon's
-Kogman
-Lanyon
-Luehrs
-McWhirter
-Pearcey
-Piotr
-Prather
-Ragwitz
-Reis
-Rockway
-Roditi
-Rolsky
-Roszatycki
-Roszatycki's
-SL
-Sedlacek
-Shlomi
-Stevan
-Vilain
-Yuval
-autarch
-backported
-backports
-blblack
-bluefeet
-chansen
-chromatic's
-dexter
-doy
-ewilhelm
-frodwith
-gphat
-groditi
-ingy
-jgoulah
-jrockway
-kolibrie
-konobi
-lbr
-merlyn
-mst
-nothingmuch
-perigrin
-phaylon
-rafl
-rindolf
-rjbs
-rlb
-robkinyon
-sartak
-stevan
-tozt
-wreis
-
-## proper names
-AOP
-CentOS
-CLOS
-CPAN
-OCaml
-SVN
-ohloh
-
-## Moose
-AttributeHelpers
-BUILDALL
-BUILDARGS
-BankAccount
-BankAccount's
-BinaryTree
-CLR
-CheckingAccount
-DEMOLISHALL
-Debuggable
-JVM
-METACLASS
-Metaclass
-MOPs
-MetaModel
-MetaObject
-Metalevel
-MooseX
-Num
-OtherName
-PosInt
-PositiveInt
-RoleSummation
-Specio
-Str
-TypeContraints
-clearers
-composable
-hardcode
-immutabilization
-immutabilize
-introspectable
-metaclass
-metaclass's
-metadata
-metaobject
-metaobjects
-metaprogrammer
-metarole
-metaroles
-metatraits
-mixins
-oose
-ro
-rw
-AttributeIsRequired
-ValidationFailedForTypeConstraint
-
-## computerese
-API
-APIs
-Baz
-Changelog
-Coercions
-DUCKTYPE
-DWIM
-GitHub
-GitHub's
-Haskell
-IRC
-Immutabilization
-Inlinable
-JSON
-Lexically
-O'Caml
-OO
-OOP
-ORM
-Overengineered
-ROLETYPE
-SUBCLASSES
-SUBTYPES
-Subclasses
-Smalltalk
-Subtypes
-TODO
-UNIMPORTING
-URI
-Unported
-Whitelist
-# from the Support manual talking about version numbers
-YY
-YYZZ
-ZZ
-arity
-arrayrefs
-autodelegation
-blog
-clearers
-codebase
-coercions
-committer
-committers
-compat
-continutation
-contrib
-datetimes
-dec
-decrement
-definedness
-deinitialized
-deprecations
-destructor
-destructors
-destructuring
-dev
-discoverable
-env
-eval'ing
-extensibility
-hashrefs
-hotspots
-immutabilize
-immutabilized
-immutabilizes
-incrementing
-inlinable
-inline
-inlines
-installable
-instantiation
-interoperable
-invocant
-invocant's
-irc
-isa
-kv
-login
-matcher
-metadata
-mixin
-mixins
-mul
-munge
-namespace
-Namespace
-namespace's
-namespaced
-namespaces
-namespacing
-natatime
-# as in required-ness
-ness
-optimizations
-overridable
-parameterizable
-parameterization
-parameterize
-parameterized
-parameterizes
-params
-pluggable
-plugins
-polymorphism
-prechecking
-prepends
-pu
-rebase
-rebased
-rebasing
-rebless
-reblesses
-reblessing
-refactored
-refactoring
-rethrows
-runtime
-serializer
-sigil
-sigils
-stacktrace
-stacktraces
-stateful
-subclass's
-subclassable
-subclasses
-subname
-subtype
-subtypes
-subtyping
-unblessed
-unexport
-unimporting
-uninitialize
-unordered
-unresolvable
-unsets
-unsettable
-utils
-whitelisted
-workflow
-workflows
-
-## other jargon
-bey
-gey
-
-## neologisms
-breakability
-delegatee
-featureful
-hackery
-hacktern
-undeprecate
-wrappee
-
-## compound
-# half-assed
-assed
-# role-ish, Ruby-ish, medium-to-large-ish
-ish
-# kool-aid
-kool
-# pre-5.10
-pre
-# vice versa
-versa
-lookup
-# co-maint
-maint
-
-## slang
-C'mon
-might've
-Nuff
-
-## things that should be in the dictionary, but are not
-attribute's
-declaratively
-everybody's
-everyone's
-human's
-indices
-initializers
-newfound
-reimplements
-reinitializes
-specializer
-unintrusive
-
-## misspelt on purpose
-emali
-uniq
-
-#docgenerator
-fixLineLength
-getExceptionsToMessages
-placeCommasAndAnd
-shortenToEighty
@@ -1,8 +1,6 @@
 #!perl
 # This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
 use Test::More;
-
-eval "use Test::Pod 1.41";
-plan skip_all => "Test::Pod 1.41 required for testing POD" if $@;
+use Test::Pod 1.41;
 
 all_pod_files_ok();