Ответ 1
Да, кажется, что это всегда было разрешено. Объединение - это класс, а шаблон - это либо функция, либо шаблон класса.
Соответствующие части стандартов:
-
[Темп]
Объявление в декларации шаблона должно
- объявить или определить функцию или класс, [...]
-
[класс]
Объединение - это класс, определенный с помощью ключа класса
union
(Таким образом, можно утверждать, что новый признак типа std::is_class
является небольшим неправильным обозначением, поэтому предполагается, что свойства разделяют пространство типов, и поэтому is_union
является отдельным, взаимоисключающим признаком.)