我有一个类模板:
template< typename ...bounded_types >
struct variant {};
但要禁止有界类型的空列表,即 variant<>
必须在编译时禁止。我可以执行以下操作:
template<>
struct variant<>;
但不太清楚:如果我的变体库包含大量的头文件,那么就不清楚,上面的特化是否不是一个前向声明类,在下面某处定义。在我看来,理想的假想解决方案是:
template<>
struct variant<> = delete;
这在更大程度上看起来是明确的,但不幸的是,反过来,C++ 语法禁止了它。
满足所描述意图的最明确方式是什么?
最佳答案
template<typename... bounded_types>
struct variant {
static_assert(sizeof...(bounded_types) > 0, "empty variant is illegal");
};
看看它是如何失败的:http://coliru.stacked-crooked.com/a/c08bee816d2bc36c
看看它是如何成功的:http://coliru.stacked-crooked.com/a/b34ece864f770d24
关于c++ - 明确禁止具体类模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26430282/