Я почти уверен, что это ошибка. {}
может использоваться вместо ()
для предоставления конструктору аргументов. Поэтому ваш код должен быть в порядке:
int main ()
{
// this is fine, calls constructor with {1, 1}, {3, 3}
a<a<int, int>, a<int, int>> q({ 1, 1 }, { 3, 3 });
// which in turn needs to construct a T from {1, 1},
// which is fine because that's the same as:
a<int, int>{1, 1}; // same as: a<int, int>(1, 1);
// and that's trivially okay (and tested in your code)
// we do likewise with A..., which is the same as above
// except with {3, 3}; and the values don't affect it
}
Так что все должно быть хорошо.