Managed C++ didn't really support the .NET way of providing methods with variable argument lists, which is to provide an array as the last argument marked with a special attribute (ParamsArrayAttribute).
OK, to be honest, it supported just defining such methods, but no syntax to invoke them other than explicitly creating an array and passing it to the method.
C++/CLI, on the other hand, fully supports both ends. To define a method with a variable argument list, you don't use [ParamsArray] attribute anymore, but the "..." syntax before the array declaration, like this:
void Print(String^ format, ... array<Object^>^ args)
{
Console::WriteLine(format, args);
}
int main()
{
Print("Hi {0} and {1}", "Peter", "Lori");
array<String^>^ args = { "John", "Mary" };
Print("Hi {0} and {1}, too!", args);
}
One thing to notice is that you can now call the method providing the arguments directly instead of creating the array explicitly (as the first Print() call above), but you can also create it and pass it, and it won't be interpreted as an array containing a single element containing an array (as in the second Print() call above).