Классовый барьер - это класс шаблонов со значением перечисления в качестве параметра шаблона. Для исходного шаблона с использованием 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
При использовании static_assert экземпляры не выполняются для частичных специализаций параметров шаблона, не являющихся ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Можно ли предшественник шаблонов? Как насчет специализаций шаблонов? [дублировать]
Anonymous » » в форуме C++ - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-