diff --git a/src/AST/ClassExtensions.cs b/src/AST/ClassExtensions.cs index a44a8d0a..178418de 100644 --- a/src/AST/ClassExtensions.cs +++ b/src/AST/ClassExtensions.cs @@ -269,7 +269,7 @@ namespace CppSharp.AST if (desugared is TemplateParameterType) return true; var tagType = desugared as TagType; - if (tagType?.IsDependent == true) + if (tagType?.Declaration is Class @class && @class.HasDependentValueFieldInLayout()) return true; var templateType = desugared as TemplateSpecializationType; if (templateType?.Arguments.Any( diff --git a/tests/NamespacesBase/NamespacesBase.h b/tests/NamespacesBase/NamespacesBase.h index 2a0f0628..ed351e2b 100644 --- a/tests/NamespacesBase/NamespacesBase.h +++ b/tests/NamespacesBase/NamespacesBase.h @@ -79,6 +79,12 @@ public: private: T field; }; +private: + union + { + int i; + float* f; + }; }; template <typename T> diff --git a/tests/NamespacesDerived/NamespacesDerived.Tests.cs b/tests/NamespacesDerived/NamespacesDerived.Tests.cs index 09366402..b2a3d4c8 100644 --- a/tests/NamespacesDerived/NamespacesDerived.Tests.cs +++ b/tests/NamespacesDerived/NamespacesDerived.Tests.cs @@ -15,7 +15,6 @@ public class NamespaceDerivedTests using (new DerivedFromSecondaryBaseInDependency()) { } using (var der2 = new Derived2()) using (der2.LocalTypedefSpecialization) { } - Assert.That(typeof(Derived2).Assembly.GetTypes().Any(t => t.FullName.Contains("Std.Vector")), Is.True); } [Test] diff --git a/tests/NamespacesDerived/NamespacesDerived.h b/tests/NamespacesDerived/NamespacesDerived.h index 3ad9f7b8..abed58c5 100644 --- a/tests/NamespacesDerived/NamespacesDerived.h +++ b/tests/NamespacesDerived/NamespacesDerived.h @@ -62,6 +62,7 @@ public: TemplateClass<int> getTemplate(); IndependentFields<int> getIndependentSpecialization(); + IndependentFields<void*> getPointerOnlySpecialization() { return IndependentFields<void*>(); } typedef DependentFields<int> LocalTypedefSpecialization; LocalTypedefSpecialization getLocalTypedefSpecialization(); Abstract* getAbstract(); @@ -71,6 +72,7 @@ private: TemplateClass<DependentFields<Derived>> nestedSpecialization; IndependentFields<int> independentSpecialization; IndependentFields<Derived> independentExternalSpecialization; + IndependentFields<Derived*> independentExternalSpecializationPointer; IndependentFields<Derived>::Nested nestedInExternalSpecialization; std::unordered_map<int, Derived> externalSpecializationOnly; };