This compiles with -std=c++11: message Foo { map<string, Foo> value = 1; } This does not compile: message Foo { map<int32, Foo> value = 1; } Needs to dig more into the underlying issue.