Skip to content

Commit

Permalink
AsSelf can no longer be applied to a registration which instance type…
Browse files Browse the repository at this point in the history
… is not registered as other type(s)/alias(es)
  • Loading branch information
ybainier committed Sep 23, 2016
1 parent 1ff2004 commit 6b4bd70
Showing 1 changed file with 29 additions and 3 deletions.
32 changes: 29 additions & 3 deletions Hypodermic/AsSelf.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,38 @@ namespace Hypodermic
{
namespace RegistrationDescriptorOperations
{

namespace Details
{

struct InstanceRegistrationNotResolvable {};
struct InstanceRegistrationResolvable {};

template <class TDescriptorInfo>
struct GetInstanceRegistrationResolvability
{
private:
typedef typename TDescriptorInfo::RegisteredBases RegisteredBases;
typedef typename TDescriptorInfo::InstanceRegistrationTag InstanceRegistrationTag;

public:
typedef typename std::conditional
<
(RegisteredBases::count == 0) || std::is_same< InstanceRegistrationTag, Tags::SelfRegistered >::value,
InstanceRegistrationResolvable,
InstanceRegistrationNotResolvable
>
::type Type;
};

} // namespace Details


template
<
class TDescriptor,
class TDescriptorInfo,
class TInstanceRegistrationTag = typename TDescriptorInfo::InstanceRegistrationTag
class TInstanceRegistrationResolvability = typename Details::GetInstanceRegistrationResolvability< TDescriptorInfo >::Type
>
class AsSelf;

Expand All @@ -22,7 +48,7 @@ namespace RegistrationDescriptorOperations
class TDescriptor,
class TDescriptorInfo
>
class AsSelf< TDescriptor, TDescriptorInfo, Tags::NotSelfRegistered >
class AsSelf< TDescriptor, TDescriptorInfo, Details::InstanceRegistrationNotResolvable >
{
public:
// This template avoids Early Template Instantiation issue
Expand Down Expand Up @@ -52,7 +78,7 @@ namespace RegistrationDescriptorOperations
class TDescriptor,
class TDescriptorInfo
>
class AsSelf< TDescriptor, TDescriptorInfo, Tags::SelfRegistered >
class AsSelf< TDescriptor, TDescriptorInfo, Details::InstanceRegistrationResolvable >
{
protected:
virtual ~AsSelf() {}
Expand Down

0 comments on commit 6b4bd70

Please sign in to comment.