Index: libcfa/prelude/prelude-gen.cc
===================================================================
--- libcfa/prelude/prelude-gen.cc	(revision fe0b94f77ce34d87dcaf5af41f5119ee8f021b11)
+++ libcfa/prelude/prelude-gen.cc	(revision 97b47ec7c9e76ee0d19dd0eb42627cd603ebae00)
@@ -159,5 +159,5 @@
 int main() {
 	cout << "# 2 \"prelude.cfa\"  // needed for error messages from this file" << endl;
-	cout << "forall( T & ) trait sized {};" << endl;
+	cout << "forall( T * ) trait sized {};" << endl;
 
 	cout << "//////////////////////////" << endl;
Index: src/AST/Decl.cpp
===================================================================
--- src/AST/Decl.cpp	(revision fe0b94f77ce34d87dcaf5af41f5119ee8f021b11)
+++ src/AST/Decl.cpp	(revision 97b47ec7c9e76ee0d19dd0eb42627cd603ebae00)
@@ -115,5 +115,6 @@
 	static_assert( sizeof(kindNames) / sizeof(kindNames[0]) == TypeDecl::NUMBER_OF_KINDS, "typeString: kindNames is out of sync." );
 	assertf( kind < TypeDecl::NUMBER_OF_KINDS, "TypeDecl kind is out of bounds." );
-	return sized ? kindNames[ kind ] : &kindNames[ kind ][ sizeof("sized") ]; // sizeof includes '\0'
+	// sizeof("sized") includes '\0' and gives the offset to remove "sized ".
+	return sized ? kindNames[ kind ] : &kindNames[ kind ][ sizeof("sized") ];
 }
 
Index: src/Validate/LinkReferenceToTypes.cpp
===================================================================
--- src/Validate/LinkReferenceToTypes.cpp	(revision fe0b94f77ce34d87dcaf5af41f5119ee8f021b11)
+++ src/Validate/LinkReferenceToTypes.cpp	(revision 97b47ec7c9e76ee0d19dd0eb42627cd603ebae00)
@@ -264,15 +264,8 @@
 
 ast::TraitDecl const * LinkTypesCore::postvisit( ast::TraitDecl const * decl ) {
-	auto mut = ast::mutate( decl );
-	if ( mut->name == "sized" ) {
-		// "sized" is a special trait - flick the sized status on for the type variable.
-		assertf( mut->params.size() == 1, "Built-in trait 'sized' has incorrect number of parameters: %zd", decl->params.size() );
-		ast::TypeDecl * td = mut->params.front().get_and_mutate();
-		td->sized = true;
-	}
-
 	// There is some overlap with code from decayForallPointers,
 	// perhaps reorganization or shared helper functions are called for.
 	// Move assertions from type parameters into the body of the trait.
+	auto mut = ast::mutate( decl );
 	for ( ast::ptr<ast::TypeDecl> const & td : decl->params ) {
 		auto expanded = expandAssertions( td->assertions );
