aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorMarco Poletti <poletti.marco@gmail.com>2017-12-27 08:41:17 +0000
committerMarco Poletti <poletti.marco@gmail.com>2017-12-27 08:41:38 +0000
commitdad7ba8e69a1041e8b8315d189ed278b45f6f621 (patch)
tree25d83ef56b27e28d2a9bb960112352d4d3a09ca4 /include
parentf47abcc3d897297ada2b16553d73459765fc52a3 (diff)
downloadgoogle-fruit-dad7ba8e69a1041e8b8315d189ed278b45f6f621.tar.gz
Try to workaround some Visual Studio ICEs that appeared in the last Appveyor build.
Diffstat (limited to 'include')
-rw-r--r--include/fruit/impl/component_functors.defn.h2
-rw-r--r--include/fruit/impl/injector/injector_storage.defn.h3
-rw-r--r--include/fruit/impl/injector/injector_storage.h5
3 files changed, 8 insertions, 2 deletions
diff --git a/include/fruit/impl/component_functors.defn.h b/include/fruit/impl/component_functors.defn.h
index dd62939..a2c6e8f 100644
--- a/include/fruit/impl/component_functors.defn.h
+++ b/include/fruit/impl/component_functors.defn.h
@@ -316,7 +316,7 @@ struct PreProcessRegisterProvider {
using AnnotatedC = NormalizeType(SignatureType(AnnotatedSignature));
using AnnotatedCDeps = NormalizeTypeVector(SignatureArgs(AnnotatedSignature));
- using R = AddProvidedType(Comp, AnnotatedC, Bool<true>, AnnotatedCDeps, NormalizedNonConstTypesIn(SignatureArgs(AnnotatedSignature)));
+ using R = AddProvidedType(Comp, AnnotatedC, Bool<true>, AnnotatedCDeps, Id<NormalizedNonConstTypesIn(SignatureArgs(AnnotatedSignature))>);
using type = If(Not(IsSame(Signature, SignatureFromLambda)),
ConstructError(AnnotatedSignatureDifferentFromLambdaSignatureErrorTag, Signature, SignatureFromLambda),
PropagateError(CheckInjectableType(RemoveAnnotations(SignatureType(AnnotatedSignature))),
diff --git a/include/fruit/impl/injector/injector_storage.defn.h b/include/fruit/impl/injector/injector_storage.defn.h
index 9a9626d..abfe720 100644
--- a/include/fruit/impl/injector/injector_storage.defn.h
+++ b/include/fruit/impl/injector/injector_storage.defn.h
@@ -705,7 +705,8 @@ struct InvokeConstructorWithInjectedArgVector<AnnotatedC(AnnotatedArgs...), frui
// `bindings_begin' *is* used below, but when there are no Args some compilers report it as unused.
(void) bindings_begin;
C* p = outerConstructHelper(injector, allocator,
- injector.lazyGetPtr<InjectorStorage::NormalizeType<AnnotatedArgs>>(deps, Indexes::value, bindings_begin)
+ injector.lazyGetPtr<typename InjectorStorage::TypeNormalizer<AnnotatedArgs>::type>(
+ deps, Indexes::value, bindings_begin)
...);
return p;
}
diff --git a/include/fruit/impl/injector/injector_storage.h b/include/fruit/impl/injector/injector_storage.h
index 1b36f91..c4cef9b 100644
--- a/include/fruit/impl/injector/injector_storage.h
+++ b/include/fruit/impl/injector/injector_storage.h
@@ -63,6 +63,11 @@ public:
using NormalizeType = fruit::impl::meta::UnwrapType<fruit::impl::meta::Eval<
fruit::impl::meta::NormalizeType(fruit::impl::meta::Type<T>)
>>;
+
+ template <typename T>
+ struct TypeNormalizer {
+ using type = NormalizeType<T>;
+ };
template <typename Signature>
using SignatureType = fruit::impl::meta::UnwrapType<fruit::impl::meta::Eval<