Почему перечисленный не может быть шаблон?

enumeration cannot be a template

Это показанная ошибка, когда я пробую составлять с BCC64 (основанный на Clang) следующий код:

template  enum class enumerado : T
{
    a,b,c,d,e
};

Сначала, я подумал, что это ясное запрещение проистекало из ограничений нижележащего типа перечисленных, так как, если тип перечисленного может быть типом шаблоном, он мог бы следовать в перечисленные неправильные, однако, когда мы это пробуем:

template  struct estructura
{
    enum class enumerado : A
    {
        a,b,c,d,e
    };
};

Составь без проблем каждый раз, когда тип A выполните ограничения, потребованные нижележащим типом перечисленные; того, чтобы не быть таким (так в перечисленный укрытый в объекте как в перечисленном глобальном контексте) мы можем видеть другую специфическую ошибку, как он состоял в том, чтобы ждать:

enum class enumerado : mi_clase_fabulosa
{
    a,b,c,d,e
};
non-integral type 'mi_clase_fabulosa' is an invalid underlying type

Итак, это мотив, о котором я осведомляюсь: почему ясно запрещено создавать перечисленный шаблон, когда уже есть контроль на Вашем нижележащем типе? Где в стандарте C ++ определено это ограничение?


Это перевод того же вопроса в Английской версии.

4
задан 23.05.2017, 15:39
1 ответ

У первоначального вопроса в stackoverflow уже есть получающий ответ, что я могу trascribir здесь: Из-за определения [Стандарт C ++ 14.1], или из-за того, что остается вне определения,

В template ты определяешь в family of classes or functions or an иначе for в family of types.

Это: ' 'Один сдержись определяет семья классов или функций или прозвища для семьи типов. ''

И как enum не ни одна из этих, его не может быть один сдержись.

Тогда, добавляю я, ограничение в стандарте подразумеваемое, не ясное.

1
ответ дан 24.11.2019, 13:58
  • 1
    Если, acept и # 233; этот ответ в оригинале, собирался отвечать мне самому, но ты избавил мне от работы:) – PaperBirdMaster 11.07.2016, 18:37

Теги

Похожие вопросы