Index: src/Common/SemanticError.h
===================================================================
--- src/Common/SemanticError.h	(revision 610194e1341d5e36cbe74f89330ac0d81feb73af)
+++ src/Common/SemanticError.h	(revision 2e0285177bb7e5cdc2afd200e041b827f132f1a3)
@@ -56,4 +56,5 @@
 	{"reference-conversion"   , "rvalue to reference conversion of rvalue: %s" , Severity::Warn},
 	{"qualifiers-zero_t-one_t", "questionable use of type qualifier %s with %s", Severity::Warn},
+	{"aggregate-forward-decl" , "forward declaration of nested aggregate: %s"  , Severity::Warn},
 };
 
@@ -62,4 +63,5 @@
 	RvalueToReferenceConversion,
 	BadQualifiersZeroOne,
+	AggrForwardDecl,
 	NUMBER_OF_WARNINGS, //This MUST be the last warning
 };
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 610194e1341d5e36cbe74f89330ac0d81feb73af)
+++ src/Parser/DeclarationNode.cc	(revision 2e0285177bb7e5cdc2afd200e041b827f132f1a3)
@@ -1003,4 +1003,29 @@
 				// };
 				if ( ! (extracted && decl->name == "" && ! anon) ) {
+					if (decl->name == "") {
+						if ( DeclarationWithType * dwt = dynamic_cast<DeclarationWithType *>( decl ) ) {
+							if ( ReferenceToType * aggr = dynamic_cast<ReferenceToType *>( dwt->get_type() ) ) {
+								if ( aggr->name.find("anonymous") == std::string::npos ) {
+									bool isInline = false;
+									if (cur->type->kind == TypeData::Aggregate || cur->type->kind == TypeData::AggregateInst) {
+										if (cur->type->kind == TypeData::Aggregate) {
+											isInline = cur->type->aggregate.inLine;
+										} else {
+											isInline = cur->type->aggInst.inLine;
+											if ( TypeData * aggr = cur->type->aggInst.aggregate ) {
+												if ( aggr->kind == TypeData::Aggregate ) {
+													isInline = isInline || aggr->aggregate.inLine;
+												}
+											}
+										}
+									}
+									if (! isInline) {
+										// temporary: warn about anonymous member declarations of named types, since this conflicts with the syntax for the forward declaration of an anonymous type
+										SemanticWarning( cur->location, Warning::AggrForwardDecl, aggr->name.c_str() );
+									}
+								}
+							}
+						}
+					}
 					decl->location = cur->location;
 					* out++ = decl;
