Подтвердить что ты не робот

Можно ли спланировать профсоюз?

Кажется, что союзы могут быть шаблоны в С++ 11, они используются, например, в эталонной реализации std:: optional.

Возможно ли это до С++ 11?

4b9b3361

Ответ 1

Да, кажется, что это всегда было разрешено. Объединение - это класс, а шаблон - это либо функция, либо шаблон класса.

Соответствующие части стандартов:

  • [Темп]

    Объявление в декларации шаблона должно

    - объявить или определить функцию или класс, [...]

  • [класс]

    Объединение - это класс, определенный с помощью ключа класса union

(Таким образом, можно утверждать, что новый признак типа std::is_class является небольшим неправильным обозначением, поэтому предполагается, что свойства разделяют пространство типов, и поэтому is_union является отдельным, взаимоисключающим признаком.)

Ответ 2

Да, я использовал такие конструкции раньше:

template <typename T>
union test
{
    unsigned char ch[sizeof(T)];
    T variable;
};