Классовый барьер - это класс шаблонов со значением перечисления в качестве параметра шаблона. Для исходного шаблона с использованием 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