При использовании static_assert экземпляры не выполняются для частичных специализаций параметров шаблона, не являющихся C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 При использовании static_assert экземпляры не выполняются для частичных специализаций параметров шаблона, не являющихся

Сообщение Anonymous »

Классовый барьер - это класс шаблонов со значением перечисления в качестве параметра шаблона. Для исходного шаблона с использованием static_assert (sizeof (syncscope) == 0, "xxxx") , чтобы избежать экземпляра шаблона. Однако, когда используется частичная специализация, появляется оператор static_assert . Но для func_test оператор static_assert игнорируется. Почему это произошло? enum class SyncScope {
kSyncCore, // block
kSyncCluster, // U1
kSyncGlobal, // Ux
};

template
class Barrier {
// static_assert(ScopeType == SyncScope::kSyncCore || ScopeType == SyncScope::kSyncCluster || ScopeType == SyncScope::kSyncGlobal, "SyncScope is not supported.");
static_assert(sizeof(SyncScope) == 0, "SyncScope is not supported."); // 编译报错
};

template
class Barrier {
public:
void wait(uint8_t count, unsigned int id) {
//
};
void arrive(uint8_t count, unsigned int id) {
//
};
};

template
class func_test {
static_assert(sizeof(T) == 0, "failed"); // 编译成功
};

template
class func_test {
};


Подробнее здесь: https://stackoverflow.com/questions/795 ... ons-of-non
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»