1

我有一个类模板:

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

但是要禁止有界类型的空列表,即variant<>必须在编译时禁止。我可以执行以下操作:

template<>
struct variant<>;

但不太清楚:如果我的变体库包含大量的头文件,那么上面的特化是否不是一个类的前向声明,在下面的某个地方定义,就不清楚了。在我看来,理想的想象解决方案将是:

template<>
struct variant<> = delete;

这在更大程度上看起来很明确,但可悲的是,反过来又被 C++ 语法所禁止。

满足所描述意图的最明确方式是什么?

4

2 回答 2

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

于 2014-10-17T17:26:20.203 回答
2

在你的情况下,你可以做

template<typename T, typename ...bounded_types >
struct variant
{};
于 2014-10-17T17:43:34.107 回答