-
Notifications
You must be signed in to change notification settings - Fork 200
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Providing non-injected arguments to DI Objects #144
Comments
If you use INJECT then yes.
No, there are other ways, depending on what you want to do.
As you see the double param there is not wrapped in unique ptr. |
I have an interface class IAssetGroup
{
public:
virtual bool IsMotorGroup() const = 0;
}; Then in AssetGroup.h I have #include <fruit/fruit.h>
#include "IAssetGroup.h"
fruit::Component<IAssetGroup> getAssetGroupComponent(); Finally I have the implementation which was as follows: class AssetGroupImpl : public IAssetGroup
{
public:
INJECT(AssetGroupImpl()) =default;
virtual bool IsMotorGroup() const override
{
return false;
}
};
fruit::Component<IAssetGroup> getAssetGroupComponent()
{
return fruit::createComponent()
.bind<IAssetGroup, AssetGroupImpl>();
} When I went back to the source of the original business object I noticed that this one took a int for the group as its only constructor parameter, I then modified the constructor to:
and added a member variable to hold it As soon as I changed the constructor to the above with ASSISTED I got a load of compiler errors |
|
I think because you have and then Injector<ScalerFactory> injector(getScalerComponent);
ScalerFactory scalerFactory(injector);
std::unique_ptr<Scaler> scaler = scalerFactory(12.1);
std::cout << scaler->scale(3) << std::endl;
and are passing the int via scalerFactor led me to expect that maybe this was needed when passing parameters |
I see, thanks for the info. This code:
Specifically the This needs to be reflected in the return type.
or
And inject Btw, you didn't explain what the int means, so I'm just assuming that you do want to have a factory. If the int values that could be passed there are a small set that is known at compile time, you should probably use annotated injection instead of assisted injection. I hope that helps. |
That doesn't seem to have worked, I'm not getting a clean compile. I'm also not sure how I inject As to the int, it represents a group number. There are group numbers stored in a database that describe a particular group of assets. You can interrogate the groups to find out if for example it belongs go the Motor Group etc - The original code had a static Create function that would create the group static counted_ptr <CAssetGroup> Create(int grp);
which just called the private Constructor The errors are as follows:
I've written a minimally non-working example project here - https://github.com/IrisPeter/MinimalFruitExample |
It looks like std::function<IAssetGroup(int)> isn't valid, presumably
because IAssetGroup is not copyable. The error is coming from std::function
itself, not Fruit.
Try the unique ptr variant.
…On Mon, Sep 26, 2022, 5:17 AM IrisPeter ***@***.***> wrote:
That doesn't seem to have worked, I'm not getting a clean compile. I'm
also not sure how I inject std::function<IAssetGroup(int)> or
std::function<std::unique_ptr<IAssetGroup>(int)> in the caller.
As to the int, it represents a group number. There are group numbers
stored in a database that describe a particular group of assets. You can
interrogate the groups to find out if for example it belongs go the Motor
Group etc - bool IsMotorGroup() const
The original code had a static Create function that would create the group
static counted_ptr <CAssetGroup> Create(int grp);
which just called the private Constructor CAssetGroup::CAssetGroup(int
grp)
The errors are as follows:
1>AssetGroup.cpp
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\data_structures\memory_pool.defn.h(55,1): warning C4141: 'inline': used more than once
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\data_structures\memory_pool.defn.h(55,1): warning C4141: FRUIT_ALWAYS_INLINE inline T* MemoryPool::allocate(std::size_t n) {
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\data_structures\memory_pool.defn.h(55,1): warning C4141: ^
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\data_structures\fixed_size_allocator.defn.h(66,1): warning C4141: 'inline': used more than once
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\data_structures\fixed_size_allocator.defn.h(66,1): warning C4141: FRUIT_ALWAYS_INLINE inline fruit::impl::meta::UnwrapType<
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\data_structures\fixed_size_allocator.defn.h(66,1): warning C4141: ^
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component_install_arg_checks.defn.h(29,1): warning C4141: 'inline': used more than once
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component_install_arg_checks.defn.h(29,1): warning C4141: FRUIT_ALWAYS_INLINE inline int checkAcceptableComponentInstallArg() {
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\component_install_arg_checks.defn.h(29,1): warning C4141: ^
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1008,19): error C2338: static_assert failed: 'std::function only accepts function types as template arguments.'
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1008,19): error C2338: static_assert(_Always_false<_Tx>, "std::function only accepts function types as template arguments.");
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1008,19): error C2338: ^
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message : see reference to class template instantiation 'std::_Get_function_impl<_Fty>' being compiled
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message : with
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message : [
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message : _Fty=IAssetGroup (int)
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message : ]
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.34.31823\include\functional(1032): message : class function : public _Get_function_impl<_Fty>::type { // wrapper for callable objects
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\component.h(481): message : see reference to class template instantiation 'std::function<IAssetGroup (int)>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\component.h(481): message : using type = decltype(test<C>(nullptr));
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : see reference to class template instantiation 'fruit::impl::meta::HasInjectAnnotation::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<CondMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : CondMetaExpr=fruit::impl::meta::HasInjectAnnotation (__cdecl *)(fruit::impl::meta::RemoveAnnotations (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::If (fruit::impl::meta::HasInjectAnnotation (__cdecl *)(fruit::impl::meta::RemoveAnnotations (__cdecl *)(AnnotatedC)),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::PreProcessRegisterConstructor,fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC)),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::PostProcessRegisterConstructor,fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC)),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedTypes,TargetRequirements,TargetNonConstRequirements,fruit::impl::meta::NormalizeTypeVector (__cdecl *)(fruit::impl::meta::SignatureArgs (__cdecl *)(fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC))),fruit::impl::meta::NormalizedNonConstTypesIn (__cdecl *)(fruit::impl::meta::SignatureArgs (__cdecl *)(fruit::impl::meta::GetInjectAnnotation (__cdecl *)(AnnotatedC))))),Comp),fruit::impl::meta::ConstructNoBindingFoundError (__cdecl *)(AnnotatedC))>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : AnnotatedC=fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : TargetRequirements=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : TargetNonConstRequirements=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : ElseMetaExpr=fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : using type = typename DoEval<ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : see reference to class template instantiation 'fruit::impl::meta::EvalIf<fruit::impl::meta::Bool<false>,ThenMetaExpr,ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : ThenMetaExpr=fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : ElseMetaExpr=fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : ElseMetaExpr=fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>)),fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : using type = typename DoEval<ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : see reference to class template instantiation 'fruit::impl::meta::EvalIf<fruit::impl::meta::Bool<false>,ThenMetaExpr,ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : ThenMetaExpr=fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::ProcessInterfaceBinding,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedType,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type)),fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : ElseMetaExpr=fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>)),fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : ElseMetaExpr=fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsNone (__cdecl *)(fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::ProcessInterfaceBinding,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedType,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type)),fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>)),fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>))))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : using type = typename DoEval<ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : see reference to class template instantiation 'fruit::impl::meta::EvalIf<fruit::impl::meta::Bool<false>,ThenMetaExpr,ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : ThenMetaExpr=fruit::impl::meta::ComponentFunctorIdentity (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : ElseMetaExpr=fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsNone (__cdecl *)(fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::ProcessInterfaceBinding,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedType,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type)),fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>)),fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>))))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(215): message : using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : ElseMetaExpr=fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>),fruit::impl::meta::Or (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type),fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>))),fruit::impl::meta::ComponentFunctorIdentity (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsNone (__cdecl *)(fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::ProcessInterfaceBinding,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedType,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type)),fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>)),fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(191): message : using type = typename DoEval<ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : see reference to class template instantiation 'fruit::impl::meta::EvalIf<fruit::impl::meta::Bool<false>,ThenMetaExpr,ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : ThenMetaExpr=fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>))),fruit::impl::meta::ConstructError (__cdecl *)(fruit::impl::NonConstBindingRequiredButConstBindingProvidedErrorTag,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::ComponentFunctorIdentity (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>)),
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : ElseMetaExpr=fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>),fruit::impl::meta::Or (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type),fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>))),fruit::impl::meta::ComponentFunctorIdentity (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsNone (__cdecl *)(fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::ProcessInterfaceBinding,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedType,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type)),fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>),fruit::impl::meta::Vector<>)),fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>),fruit::impl::meta::AutoRegister (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::NormalizeType (__cdecl *)(fruit::impl::meta::Type<std::function<IAssetGroup (int)>>)))))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(202): message : using type = typename EvalIf<typename DoEval<CondMetaExpr>::type, ThenMetaExpr, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::If (fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT),fruit::impl::meta::Vector<>),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(NonConstBindingRequired,fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT),fruit::impl::meta::Vector<>))),fruit::impl::meta::ConstructError (__cdecl *)(fruit::impl::NonConstBindingRequiredButConstBindingProvidedErrorTag,fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT)),fruit::impl::meta::ComponentFunctorIdentity (__cdecl *)(Comp)),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT),TargetRequirements),fruit::impl::meta::Or (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(NonConstBindingRequired),fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT),TargetNonConstRequirements))),fruit::impl::meta::ComponentFunctorIdentity (__cdecl *)(Comp),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::Not (__cdecl *)(fruit::impl::meta::IsNone (__cdecl *)(fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<T>,fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT)))),fruit::impl::meta::Call (__cdecl *)(fruit::impl::meta::ComposeFunctors (__cdecl *)(fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::ProcessInterfaceBinding,fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT),fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<T>,fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT)),NonConstBindingRequired),fruit::impl::meta::ComponentFunctor (__cdecl *)(fruit::impl::meta::EnsureProvidedType,TargetRequirements,TargetNonConstRequirements,fruit::impl::meta::FindInMap (__cdecl *)(fruit::impl::meta::Vector<T>,fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT)),NonConstBindingRequired)),Comp),fruit::impl::meta::If (__cdecl *)(fruit::impl::meta::And (__cdecl *)(NonConstBindingRequired,fruit::impl::meta::IsInSet (__cdecl *)(fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT),TargetRequirements)),fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::Catch (__cdecl *)(fruit::impl::meta::AutoRegister (__cdecl *)(Comp,TargetRequirements,TargetNonConstRequirements,fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT)),fruit::impl::NoBindingFoundErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<AnnotatedT>),fruit::impl::NoBindingFoundForAbstractClassErrorTag,fruit::impl::meta::EnsureProvidedTypeErrorHandler<AnnotatedT>),fruit::impl::meta::AutoRegister (__cdecl *)(Comp,TargetRequirements,TargetNonConstRequirements,fruit::impl::meta::NormalizeType (__cdecl *)(AnnotatedT))))))>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : AnnotatedT=fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : NonConstBindingRequired=fruit::impl::meta::IsSame::apply<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>::type,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : TargetRequirements=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : TargetNonConstRequirements=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : T=fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::EnsureProvidedType (Comp,MetaExpr,MetaExpr,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Bool<true>)>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : MetaExpr=fruit::impl::meta::Vector<>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<MaybeErrorMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : MaybeErrorMetaExpr=fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::EnsureProvidedType,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Bool<true>>::type (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>)
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : using type = typename EvalPropagateError<typename DoEval<MaybeErrorMetaExpr>::type, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::PropagateError (fruit::impl::meta::ComponentFunctor::apply<MetaExpr,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Bool<true>>::type (__cdecl *)(Comp),fruit::impl::meta::PropagateError (__cdecl *)(fruit::impl::meta::ComponentFunctorIdentity (__cdecl *)(fruit::impl::meta::GetResult (__cdecl *)(fruit::impl::meta::ComponentFunctor::apply<MetaExpr,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Bool<true>>::type (__cdecl *)(Comp))),fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<MetaExpr,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Bool<true>>::type,fruit::impl::meta::ComponentFunctorIdentity>::type::apply<Comp>::Op))>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : MetaExpr=fruit::impl::meta::EnsureProvidedType,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::Call (fruit::impl::meta::FoldVector (__cdecl *)(TypesToProvide,fruit::impl::meta::EnsureProvidedTypes::apply<MetaExpr,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,TypesToProvide,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>>::Helper,fruit::impl::meta::ComponentFunctorIdentity),Comp)>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : TypesToProvide=fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : MetaExpr=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::EnsureProvidedTypes (SourceComp,fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::SetToVector (__cdecl *)(fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::Vector<MetaExpr>,fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>)),fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::Vector<>)),fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::Vector<MetaExpr>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>),fruit::impl::meta::Vector<>)),fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>))))),fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::Vector<MetaExpr>,fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>)),fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::Vector<>)),fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::Vector<MetaExpr>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::SetIntersection (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>),fruit::impl::meta::Vector<>)),fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::Vector<MetaExpr>),fruit::impl::meta::SetDifference (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>)))),fruit::impl::meta::SetUnion (__cdecl *)(fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<MetaExpr>)))>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : SourceComp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : MetaExpr=fruit::impl::meta::Type<std::function<IAssetGroup (int)>>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(102): message : MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<fruit::impl::meta::ConvertComponent (Comp,MetaExpr)>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : Comp=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>>,fruit::impl::meta::EmptyList>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : MetaExpr=fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Vector<>>>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(117): message : MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(249): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<MaybeErrorMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(249): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(249): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(249): message : MaybeErrorMetaExpr=fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent,fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Vector<>>>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>>::type (__cdecl *)(fruit::impl::meta::GetResult (__cdecl *)(fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::AddDeferredInterfaceBinding,fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>::type,fruit::impl::meta::ProcessDeferredBindings>::type (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>)))
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(249): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(249): message : using type = typename EvalPropagateError<typename DoEval<MaybeErrorMetaExpr>::type, ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(220): message : see reference to class template instantiation 'fruit::impl::meta::DoEval<ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(220): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(220): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(220): message : ElseMetaExpr=fruit::impl::meta::PropagateError (__cdecl *)(fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent,fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Vector<>>>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>>::type (__cdecl *)(fruit::impl::meta::GetResult (__cdecl *)(fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::AddDeferredInterfaceBinding,fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>::type,fruit::impl::meta::ProcessDeferredBindings>::type (__cdecl *)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>))),fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::AddDeferredInterfaceBinding,fruit::impl::meta::Type<IAssetGroup>,fruit::impl::meta::Type<AssetGroupImpl>>::type,fruit::impl::meta::ProcessDeferredBindings>::type,fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent,fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>>,fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<std::function<IAssetGroup (int)>>,fruit::impl::meta::Vector<>>>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>>::type>::type::apply<fruit::impl::meta::Comp<fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::Vector<>,fruit::impl::meta::EmptyList>>::Op)
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(220): message : ]
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(220): message : using type = typename DoEval<ElseMetaExpr>::type;
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : see reference to class template instantiation 'fruit::impl::meta::EvalPropagateError<fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ComponentFunctor::apply<MetaExpr,fruit::impl::meta::Type<I>,fruit::impl::meta::Type<C>>::type,fruit::impl::meta::ProcessDeferredBindings>::type::apply<fruit::impl::meta::Comp<RsSupersetParam,PsParam,NonConstRsPsParam,DepsParam,InterfaceBindingsParam,DeferredBindingFunctorsParam>>::Op,ElseMetaExpr>' being compiled
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : with
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : [
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : MetaExpr=fruit::impl::meta::AddDeferredInterfaceBinding,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : I=IAssetGroup,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : C=AssetGroupImpl,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : RsSupersetParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : PsParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : NonConstRsPsParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : DepsParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Include\fruit\impl\meta\eval.h(236): message : InterfaceBindingsParam=fruit::impl::meta::Vector<>,
1>Libraries\fruit-3.6.0\out\install\x64-Debug\Inc
|
Thanks @poletti-marco That fixed the compile errors. Question 1How do I create a group so that I get an AssetGroupImpl that results in it having m_GroupId = 5 Previously I would have done:
|
Question 2How would I have been able to use I don't know whether I would need to touch AssetGroupImpl, or IAssetGroup or both! Is it even possible to have something valid work with the above getAssetGroupComponent IAssetGroup is not its own a thing you would expect to be able copy as its only really a contract, it makes sense that the possible Impl classes themselves might decide one way or the other on copying? |
You inject the factory, then call it with 5.
IAssetGroup is not a concrete class so it's not movable. If there's only 1 implementation, and you're ok exposing the implementation to the callers (which is probably not a good idea in most cases, but just for the sake of the argument) then you could have std::function<CAssetGroup(int)>> as long as CAssetGroup is at least movable. |
I don't think I really understand what you mean when you say inject the factory. In the Scaling Doubles Injection Test you have: Injector<ScalerFactory> injector(getScalerComponent);
ScalerFactory scalerFactory(injector);
std::unique_ptr<Scaler> scaler = scalerFactory(12.1);
std::cout << scaler->scale(3) << std::endl;
Its not obvious to me that the factory is injected. Or should I be looking at a different sample that shows what you mean? |
"injected" in this context means that you're getting an instance from the Fruit Injector.
Or it could be implicit, e.g. via constructor injection (https://github.com/google/fruit/wiki/quick-reference#constructor-injectionhttps://github.com/google/fruit/wiki/quick-reference#constructor-injection):
|
Thanks @poletti-marco That helps, so it looks like I want to do something along the lines of your Foo class above. Foo.hfruit::Component<fruit::Required<ISimpleInterfaceForInjection1,
... IAssetGroup with factory using single int argument ...,
ISimpleInterfaceForInjection2>,
IFoo>//IFoo requires multiple interfaces
getComplexComponent();
Foo.cppclass Foo {
private:
ISimpleInterfaceForInjection1* simpleInterface1;
std::function<std::unique_ptr<IAssetGroup>(int)> create_group;
ISimpleInterfaceForInjection2* simpleInterface2;
public:
INJECT(Foo(ISimpleInterfaceForInjection1* simpleInterfaceForInjection1,
std::function<std::unique_ptr<IAssetGroup>(int)> create_group,
ISimpleInterfaceForInjection1* simpleInterfaceForInjection2)) : simpleInterface1(simpleInterfaceForInjection1),
simpleInterface2(simpleInterfaceForInjection2),
create_group(create_group) {
}
void do_stuff() {
std::unique_ptr<IAssetGroup> group = create_group(5);
if (group->is_motor_group()) { ... }
}
};
In foo.h, what would the 2nd line that allows us to use an IAssetGroup factory be? |
That said, not sure if you want to use fruit::Required here, instead of installing the component that provides |
In the "Scaling Doubles Injection Test" you have the ScalerImpl class that needs a double parameter as well as in injected object of the Multiplier interface, so you have:
If you wanted another object that needed a double parameter but didn't need any other injected object to do its work, would you still need the
ASSISTED
macro?Also
getScalerComponent
instead uses an intermediaryScalerFactory
that uses std::function and std::unique_ptr.Is that the only way to create a component and pass a value to the constructor? Also why do components with standard parameters need std::unique_ptr or was that just specific to the example in that test project?
The text was updated successfully, but these errors were encountered: