明确禁止具体的类模板专业化

时间:2014-10-17 17:24:55

标签: c++ templates c++11 template-specialization class-template

我有一个课程模板:

template< typename ...bounded_types >
struct variant {};

但是要禁止有限类型的空列表,即在编译时必须禁止variant<>。我可以做到以下几点:

template<>
struct variant<>;

但不太清楚:如果我的变种库包含大量标题,那么不明显,上述专业化是否不是前向声明类,定义在下面的某个地方。在我看来,理想的想象解决方案将是:

template<>
struct variant<> = delete;

这在很大程度上是明确的,但遗憾的是,C ++语法禁止这样做。

满足所描述意图的最直接方式是什么?

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

在您的情况下,您可以

template<typename T, typename ...bounded_types >
struct variant
{};