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 に答える