This is a managed pointer, same as reference-type reference in C# or VB.NET. The symbol ^ itself is called
handle to object operator:
https://msdn.microsoft.com/en-us/library/yk97tc08.aspx[
^].
C++/CLI approach to the managed pointers is unique among .NET language, because the object can be used without references, as the object can be referenced directly with name of a variable of the managed "ref" type. The analogy with "regular" pointer suggests the usual object-on-stack storage, but, surprisingly, it's a kind of fake, and the managed heap is used anyway with full simulation of value semantics. You can read about it in this publication:
http://www.gotw.ca/publications/C++CLIRationale.pdf[
^].
Why two ^ in your code fragment? Just think about it: two different types are involved: the list type (generic
System::Collecton::Generic::List<>
instantiated to a complete type using a generic type parameter) and the type of the list element (in your case, a generic parameter). Both are reference types.
—SA