list-initialization is occurring. Since (as in C) you can initialize the type with
MyTest mt = {1, 'c'};
the same initialization takes place at the point of the call
(N3690) 8.5/17 [...]
-- If the initializer is a (non-parenthesized) braced-init-list, the object or reference is list-initialized
8.5.4/3 gives the example:
struct S2 { // OK
int m1;
double m2, m3;
};
S2 s21 = { 1, 2, 3.0 }; // OK
Calling the function with an initializer list behaves the same way. Further:
(8.5.1/1) An aggregate is an array or a class (Clause 9) with no user-provided constructors (12.1), no private or protected non-static data members (Clause 11), no base classes (Clause 10), and no virtual functions (10.3). When an aggregate is initialized by an initializer list, as specified in 8.5.4, the elements of the initializer list are taken as initializers for the members of the aggregate, in increasing subscript or member order.