我有一个课程模板:
template< typename ...bounded_types >
struct variant {};
但是要禁止有限类型的空列表,即在编译时必须禁止variant<>
。我可以做到以下几点:
template<>
struct variant<>;
但不太清楚:如果我的变种库包含大量标题,那么不明显,上述专业化是否不是前向声明类,定义在下面的某个地方。在我看来,理想的想象解决方案将是:
template<>
struct variant<> = delete;
这在很大程度上是明确的,但遗憾的是,C ++语法禁止这样做。
满足所描述意图的最直接方式是什么?
答案 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
{};